
يعزل الحاويات في بيئة رملية (Sandbox) عبر نواة تطبيق تعمل في فضاء المستخدم تعترض استدعاءات النظام، وتحدّ من وصول نواة المضيف، وتتكامل مع Docker/Kubernetes من خلال بيئة تشغيل OCI.

gVisor يوفر طبقة قوية من العزل بين التطبيقات قيد التشغيل ونظام التشغيل المضيف. إنه نواة تطبيق تنفّذ واجهة شبيهة بلينكس. على عكس لينكس، فهو مكتوب بلغة آمنة من حيث الذاكرة (Go) ويعمل في مساحة المستخدم.
يتضمن gVisor بيئة تشغيل مبادرة الحاويات المفتوحة (OCI) تُسمى runsc تسهّل العمل مع أدوات الحاويات الموجودة. تتكامل بيئة تشغيل runsc مع Docker وKubernetes، مما يجعل تشغيل الحاويات المعزولة (sandboxed) أمرًا بسيطًا.
seccomp-bpf)، وليس غلافًا فوق بدائيات عزل لينكس (مثل firejail, AppArmor، وما إلى ذلك).يتّبع gVisor نهجًا ثالثًا مميزًا، إذ يوفّر العديد من الفوائد الأمنية للأجهزة الافتراضية مع الحفاظ على بصمة موارد أقل، وسرعة إقلاع عالية، ومرونة التطبيقات العادية في مساحة المستخدم.
الحاويات ليست صندوق رمل (sandbox). في حين أحدثت الحاويات ثورة في طريقة تطويرنا للتطبيقات وتعبئتها ونشرها، فإن استخدامها لتشغيل تعليمات برمجية غير موثوقة أو يُحتمل أن تكون خبيثة دون عزل إضافي ليس فكرة جيدة. وبينما يسمح استخدام نواة واحدة مشتركة بتحقيق الكفاءة ومكاسب الأداء، فإنه يعني أيضًا أن الهروب من الحاوية ممكن بثغرة واحدة.
gVisor هو نواة تطبيق للحاويات. يحدّ من سطح نواة المضيف الذي يمكن للتطبيق الوصول إليه مع الاستمرار في منح التطبيق إمكانية الوصول إلى جميع الميزات التي يتوقعها. على عكس معظم الأنوية، لا يفترض gVisor أو يتطلب مجموعة ثابتة من الموارد المادية؛ بل يستفيد من وظائف نواة المضيف الموجودة ويعمل كعملية عادية. بعبارة أخرى، ينفّذ gVisor لينكس عبر لينكس.
لا ينبغي الخلط بين gVisor وبين التقنيات والأدوات الهادفة إلى تحصين الحاويات ضد التهديدات الخارجية، أو توفير فحوصات سلامة إضافية، أو تحديد نطاق الوصول لخدمة معينة. يجب دائمًا توخي الحذر بشأن البيانات التي يتم إتاحتها للحاوية.
وثائق المستخدم والبنية التقنية، بما في ذلك أدلة البدء السريع، متاحة في gvisor.dev.
يُبنى gVisor على معماريتي x86_64 وARM64. قد تتوفر بنى معمارية أخرى في المستقبل.
لأغراض هذه التعليمات، يتم تغليف bazel وتبعيات البناء الأخرى في حاوية بناء. يمكن استخدام bazel مباشرة، أو كتابة make help للحصول على الأهداف القياسية.
تأكد من تثبيت التبعيات التالية:
أنشئ حزمة tar للإصدار تحتوي على runsc، وcontainerd-shim-runsc-v1 شيم containerd، وعدد قليل من الملفات الثنائية المساعدة التي يتوقع runsc العثور عليها في دليل gvisor-bin/ بجوار نفسه، ثم استخرجها إلى /usr/local/bin:
make release-tarball DESTINATION=bin/
sudo tar -C /usr/local/bin -xf bin/gvisor.tar.bz2
لبناء مكتبات أو ملفات ثنائية محددة، يمكنك تحديد الهدف:
make build TARGETS="//pkg/tcpip:tcpip"
لا يُنصح باستخدام Bazel مباشرة بسبب الحمل الإضافي، لكن للبدء:
بعد إعداد التبعيات، يكون استخدام Bazel مشابهًا لاستخدام Makefile:
bazel build -c opt //debian:gvisor-release-tar
لتشغيل مجموعات الاختبار القياسية، يمكنك استخدام:
make unit-tests
make tests
لتشغيل اختبارات محددة، يمكنك تحديد الهدف:
# Makefile
make test TARGETS="//runsc:version_test"
# Bazel
bazel test //runsc:version_test
تدعم بعض الحزم تشغيل الاختبارات مباشرة على macOS. وقت كتابة هذا النص، يتطلب gVisor bazel 8، ويمكنك تثبيته عبر homebrew:
brew install bazel@8
# You can then run the tests, e.g.:
$(brew --prefix bazel@8)/bin/bazel test --macos_sdk_version=$(xcrun --show-sdk-version) -- //tools/nogo/... //tools/check{aligned,const,escape,linkname,locks,unsafe}/...
go getيستخدم هذا المشروع bazel لبناء وإدارة التبعيات. يتم الحفاظ على فرع go اصطناعي متوافق مع أدوات go القياسية لتحقيق الراحة. وهذا مفيد للحزم والمكتبات الخارجية التي تعتمد على الحزم الفرعية لـ gVisor (مثل الشبكات في مساحة المستخدم عبر Netstack) لاستيراد كود Go الخاص بـ gVisor في مشاريع Go الخاصة بها.
حدد هذا الفرع صراحةً باستعلام الفرع go. يحل @latest إلى master، الأمر الذي يتطلب Bazel وغير متوافق مع أدوات Go القياسية:
go get gvisor.dev/gvisor/pkg/tcpip/transport/tcp@go
ملاحظة: إصدارات runsc المبنية من هذا الفرع غير مدعومة. يتطلب gVisor وrunsc عدة ملفات ثنائية (بعضها غير مكتوب حتى بلغة Go) لكي يعملا. فرع go مدعوم بأفضل جهد ممكن، ولا يُدعم التطوير المباشر على هذا الفرع. يجب أن يتم التطوير على فرع master، ثم ينعكس إلى فرع go.
انظر GOVERNANCE.md للحصول على معلومات حوكمة المشروع.
تُعد القائمة البريدية gvisor-users والقائمة البريدية gvisor-dev نقطتي بداية جيدتين للأسئلة والنقاشات.
انظر SECURITY.md.
انظر CONTRIBUTING.md.