IncludedOS คือระบบปฏิบัติการยูนิเคอร์เนลขั้นต่ำที่รวมไว้สำหรับบริการ C++ ที่ทำงานบนคลาวด์และบน HW จริง การเริ่มโปรแกรมด้วย #include <os>
จะรวมระบบปฏิบัติการเล็กๆ ไว้ในบริการของคุณในระหว่างเวลาลิงก์
IncludedOS เป็นซอฟต์แวร์ฟรี โดยไม่มี "การรับประกันหรือข้อจำกัดใดๆ ทั้งสิ้น"
หมายเหตุ: IncludedOS อยู่ระหว่างการพัฒนา API สาธารณะไม่ควรถือว่ามีเสถียรภาพ
ดูรายการคุณสมบัติและข้อจำกัดเพิ่มเติมได้ในเว็บไซต์เอกสารประกอบของเรา
สำหรับการสร้างและการบูตบริการรวม OS คุณจะต้องใช้ nix และ Linux Nix จะดาวน์โหลดและตั้งค่าเวอร์ชันที่ถูกต้องของไลบรารีและคอมไพเลอร์ที่จำเป็นทั้งหมดโดยอัตโนมัติ
เพื่อเร่งความเร็วบิลด์ในเครื่อง เราขอแนะนำให้กำหนดค่า nix ด้วยการสนับสนุน ccache แต่นี่ไม่ใช่ข้อกำหนด หากต้องการใช้ ccache คุณสามารถเพิ่ม --arg withCcache true
ลงในคำสั่ง nix-build
และ nix-shell
ส่วนใหญ่ที่แสดงด้านล่าง
ขณะนี้ GeneOS ไม่สามารถสร้างบน macOS หรือ Windows ได้
"hello world" ขั้นต่ำของ includeOS ดูเหมือนโปรแกรม C ++ ทั่วไป:
# include < iostream >
int main (){
std::cout << " Hello world n " ;
}
บริการ "Hello world" เต็มรูปแบบพร้อมเวิร์กโฟลว์ที่ใช้งานได้มีอยู่ใน repo ของ Hello World พื้นที่เก็บข้อมูลยังสามารถใช้เป็นจุดเริ่มต้นสำหรับการพัฒนาบริการ IncludedOS ของคุณเองได้
สำหรับตัวอย่างบริการขั้นสูงเพิ่มเติม โปรดดูการทดสอบการรวมระบบ (ภายใต้ ./IncludeOS/test/*/integration)
หากต้องการสร้าง IncludedOS ให้รัน
$ nix-build
สิ่งนี้จะสร้าง toolchain และไลบรารีเคอร์เนลรวม OS ทั้งหมด
โปรดทราบว่าการสร้างครั้งแรกจะใช้เวลาสักครู่จึงจะเสร็จสมบูรณ์ เนื่องจาก Toolchain รวมระบบปฏิบัติการถูกสร้างขึ้นใหม่จากซอร์สโค้ด ซึ่งรวมถึง clang, llvm, libcxx, musl และอื่นๆ ไม่มีแคชไบนารี nix สำหรับไฟล์เหล่านี้ในขณะนี้ การสร้างครั้งต่อไปจะดำเนินการเร็วขึ้นมากเมื่อ toolchain ถูกแคชไว้ใน nix-store ในเครื่อง
หลังจากทำการเปลี่ยนแปลงเคอร์เนลแล้ว ให้รัน nix-build
อีกครั้งเพื่อรับไบนารีใหม่ หากคุณกำลังวนซ้ำการเปลี่ยนแปลงในส่วนใดส่วนหนึ่งของเคอร์เนล คุณสามารถเร่งการสร้างได้อย่างมากโดยใช้ ccache คำสั่ง nix-build
และ nix-shell
ทั้งหมดในส่วนนี้สนับสนุนพารามิเตอร์ทางเลือก --arg withCcache true
การสร้างเคอร์เนลใหม่ทั้งหมดในระหว่างการพัฒนาอาจไม่ได้เป็นประโยชน์เสมอไป คุณสามารถรับเชลล์การพัฒนาพร้อมสภาพแวดล้อมที่กำหนดค่าไว้ล่วงหน้าได้โดยใช้ shell.nix
:
$ nix-shell
คำแนะนำเพิ่มเติมจะแสดงสำหรับการกำหนดค่าเครือข่าย VM แบบเลือกได้ หรือการแทนที่เส้นทางการบิลด์เมื่อเริ่มต้นเชลล์
โดยค่าเริ่มต้น th เชลล์จะสร้าง unikernel จาก example.nix
ด้วย ตัวอย่าง Unikernel สามารถบูตได้จากภายในเชลล์:
$ nix-shell
[...]
nix$ boot hello_includeos.elf.bin
หากคุณต้องการสร้าง Unikernel ที่แตกต่างจากตัวอย่าง คุณสามารถระบุได้ด้วยพารามิเตอร์ --argstr unikernel [path]
ใช้สำหรับการทดสอบการรวมระบบเป็นหลัก ตัวอย่างเช่น หากต้องการสร้างและรัน stacktrace-test:
$ nix-shell --argstr unikernel ./test/kernel/integration/stacktrace
[...]
nix$ ls -l kernel *
kernel_stacktrace
nix$ boot kernel_stacktrace
[...]
Calling os::print_backtrace ()
symtab or strtab is empty, indicating image may be stripped
[0] 0x000000000025dcd2 + 0x000: 0x25dcd2
[1] 0x000000000021097d + 0x000: 0x21097d
[2] 0x00000000002b370a + 0x000: 0x2b370a
[3] 0x0000000000210eea + 0x000: 0x210eea
We reached the end.
หากต้องการสร้างและรัน VM ทดสอบเป็นคำสั่งเดียว:
$ nix-shell --argstr unikernel ./test/kernel/integration/stacktrace --run ./test.py
คุณสามารถรันการทดสอบการรวมทั้งหมดได้โดยใช้สคริปต์ ./test.sh
การทดสอบจะดำเนินการภายในเครื่องในสภาพแวดล้อม nix เราขอแนะนำให้ตรวจสอบด้วยตนเองว่าการทดสอบทั้งหมดผ่านภายในเครื่อง ก่อนที่จะส่ง PR ใหม่ไปยัง IncludedOS เพื่อประหยัดเวลาในการตรวจสอบ
การทดสอบแต่ละรายการสามารถดำเนินการกับ nix-shell
ได้โดยตรง ดู test.sh
สำหรับรายละเอียดเพิ่มเติม
GeneOS กำลังได้รับการพัฒนาบน GitHub สร้างส้อมของคุณเองและส่งคำขอดึงถึงเรา โปรดอ่านแนวทางสำหรับการมีส่วนร่วมใน InclusiveOS
เราต้องการปฏิบัติตามแนวทางหลัก ISO C++ Core ให้มากที่สุด เมื่อคุณพบโค้ดใน IncludedOS ที่ไม่ปฏิบัติตาม โปรดแจ้งให้เราทราบในตัวติดตามปัญหา - หรือดีกว่านั้น แก้ไขด้วยทางแยกของคุณเอง และส่งคำขอดึงมาให้เรา
หากคุณพบปัญหาด้านความปลอดภัยใน IncludedOS โปรดหลีกเลี่ยงเครื่องมือติดตามปัญหาสาธารณะ ให้ส่งอีเมลไปที่ [email protected] แทน สำหรับข้อมูลเพิ่มเติมและการเข้ารหัส โปรดดูเอกสารประกอบ