IncludeOS هو نظام تشغيل أحادي النواة قابل للتضمين لخدمات C++ التي تعمل في السحابة وعلى الأجهزة الحقيقية. سيؤدي بدء برنامج باستخدام #include <os>
إلى تضمين نظام تشغيل صغير حرفيًا في خدمتك أثناء وقت الارتباط.
IncludeOS هو برنامج مجاني، "بدون أي ضمانات أو قيود من أي نوع".
ملحوظة: IncludeOS قيد التطوير النشط. لا ينبغي اعتبار واجهة برمجة التطبيقات العامة مستقرة.
يمكن العثور على قائمة أطول من الميزات والقيود على موقع التوثيق الخاص بنا.
لإنشاء خدمات IncludeOS وتشغيلها، ستحتاج إلى نظامي nix وLinux. سيقوم Nix تلقائيًا بتنزيل الإصدارات الصحيحة من جميع المكتبات والمترجمين المطلوبين وإعدادها.
لتسريع عمليات الإنشاء المحلية، نوصي أيضًا بتكوين nix بدعم ccache ولكن هذا ليس شرطًا. لاستخدام ccache، يمكن إضافة --arg withCcache true
إلى معظم أوامر nix-build
و nix-shell
الموضحة أدناه.
لا يمكن حاليًا إنشاء IncludeOS على نظام التشغيل macOS أو Windows.
يبدو الحد الأدنى من IncludeOS "hello World" وكأنه برنامج C++ عادي:
# include < iostream >
int main (){
std::cout << " Hello world n " ;
}
تتوفر خدمة "Hello World" الكاملة مع سير عمل فعال في helloworld repo. يمكن أيضًا استخدام المستودع كنقطة بداية لتطوير خدمة IncludeOS الخاصة بك.
للحصول على المزيد من أمثلة الخدمات المتقدمة، راجع اختبارات التكامل (تحت ./IncludeOS/test/*/integration).
لبناء IncludeOS، قم بتشغيل
$ nix-build
سيؤدي هذا إلى إنشاء سلسلة الأدوات وجميع مكتبات IncludeOS kernel.
لاحظ أن الإصدار الأول سيستغرق بعض الوقت حتى يكتمل، حيث تتم إعادة بناء سلسلة أدوات IncludeOS من التعليمات البرمجية المصدر. يتضمن ذلك clang وllvm وlibcxx وmusl وما إلى ذلك. لا توجد ذاكرة تخزين مؤقت ثنائية nix متاحة لهذه الملفات في الوقت الحالي. ستتم عمليات البناء اللاحقة بشكل أسرع بكثير عندما يتم تخزين سلسلة الأدوات مؤقتًا في متجر nix المحلي.
بعد إجراء التغييرات على النواة، قم بتشغيل nix-build
مرة أخرى للحصول على ثنائيات جديدة. إذا كنت تقوم بتكرار التغييرات في قسم واحد من النواة، فيمكنك تسريع عملية الإنشاء بشكل كبير باستخدام ccache. تدعم كافة أوامر nix-build
و nix-shell
في هذا القسم المعلمة الاختيارية --arg withCcache true
.
ليس من العملي دائمًا إعادة بناء النواة بأكملها أثناء التطوير. يمكنك الحصول على غلاف تطوير مع بيئة مُعدة مسبقًا باستخدام shell.nix
:
$ nix-shell
سيتم عرض المزيد من الإرشادات حول تكوين شبكة VM بشكل اختياري أو تجاوز مسار البناء عند بدء تشغيل Shell.
افتراضيًا، ستقوم الصدفة أيضًا ببناء unikernel من example.nix
. يمكن تمهيد المثال unikernel من داخل الصدفة:
$ nix-shell
[...]
nix$ boot hello_includeos.elf.bin
إذا كنت تريد إنشاء نواة موحدة مختلفة عن تلك الموجودة في المثال، فيمكن تحديد ذلك باستخدام المعلمة --argstr unikernel [path]
. يستخدم هذا في المقام الأول لاختبارات التكامل. على سبيل المثال، لإنشاء اختبار stacktrace وتشغيله:
$ 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
. سيتم تشغيل الاختبارات محليًا في بيئة لا شىء. نوصي بالتحقق يدويًا من اجتياز جميع الاختبارات محليًا قبل إرسال تقرير علاقات عامة جديد إلى IncludeOS لتوفير وقت المراجعة.
يمكن إجراء الاختبارات الفردية باستخدام nix-shell
مباشرةً. راجع test.sh
لمزيد من التفاصيل.
يتم تطوير IncludeOS على GitHub. قم بإنشاء شوكة خاصة بك وأرسل لنا طلب سحب. يرجى قراءة إرشادات المساهمة في IncludeOS.
نريد الالتزام قدر الإمكان بإرشادات ISO C++ الأساسية. عندما تجد رمزًا غير ملتزم في IncludeOS، فيرجى إخبارنا بذلك في أداة تعقب المشكلات - أو حتى الأفضل من ذلك، قم بإصلاحه في مفترقك الخاص وأرسل لنا طلب سحب.
إذا اكتشفت مشكلة أمنية في IncludeOS، فيرجى تجنب أداة تعقب المشكلات العامة. بدلاً من ذلك، أرسل بريدًا إلكترونيًا إلى[email protected]. لمزيد من المعلومات والتشفير يرجى الرجوع إلى الوثائق.