
यूज़रस्पेस एप्लिकेशन कर्नेल के माध्यम से कंटेनरों को सैंडबॉक्स करता है जो सिस्टम कॉल को इंटरसेप्ट करता है, होस्ट कर्नेल एक्सेस को सीमित करता है, और OCI रनटाइम के माध्यम से Docker/Kubernetes के साथ एकीकृत होता है।

gVisor चल रहे अनुप्रयोगों और होस्ट ऑपरेटिंग सिस्टम के बीच अलगाव की एक मजबूत परत प्रदान करता है। यह एक एप्लिकेशन कर्नेल है जो Linux-जैसा इंटरफ़ेस लागू करता है। Linux के विपरीत, यह एक मेमोरी-सुरक्षित भाषा (Go) में लिखा गया है और यूज़रस्पेस में चलता है।
gVisor में एक Open Container Initiative (OCI) रनटाइम शामिल है जिसे runsc कहा जाता है, जो मौजूदा कंटेनर टूलिंग के साथ काम करना आसान बनाता है। runsc रनटाइम Docker और Kubernetes के साथ एकीकृत होता है, जिससे सैंडबॉक्स्ड कंटेनर चलाना सरल हो जाता है।
seccomp-bpf), और न ही Linux अलगाव प्रिमिटिव्स पर एक रैपर है (जैसे firejail, AppArmor, आदि)।gVisor एक अलग तीसरा दृष्टिकोण अपनाता है, जो VMs के कई सुरक्षा लाभ प्रदान करता है, साथ ही नियमित यूज़रस्पेस अनुप्रयोगों के कम संसाधन उपयोग, तेज़ स्टार्टअप और लचीलेपन को बनाए रखता है।
कंटेनर एक सैंडबॉक्स नहीं हैं। जबकि कंटेनरों ने हमारे अनुप्रयोगों को विकसित, पैकेज और तैनात करने के तरीके में क्रांति ला दी है, अतिरिक्त अलगाव के बिना अविश्वसनीय या संभावित दुर्भावनापूर्ण कोड चलाने के लिए उनका उपयोग करना अच्छा विचार नहीं है। जबकि एक एकल, साझा कर्नेल का उपयोग दक्षता और प्रदर्शन लाभ की अनुमति देता है, इसका मतलब यह भी है कि एक ही भेद्यता के साथ कंटेनर एस्केप संभव है।
gVisor कंटेनरों के लिए एक एप्लिकेशन कर्नेल है। यह अनुप्रयोग के लिए सुलभ होस्ट कर्नेल सतह को सीमित करता है, जबकि अनुप्रयोग को उन सभी सुविधाओं तक पहुंच प्रदान करता है जिनकी वह अपेक्षा करता है। अधिकांश कर्नेल के विपरीत, gVisor भौतिक संसाधनों के एक निश्चित सेट को नहीं मानता या आवश्यक नहीं करता है; इसके बजाय, यह मौजूदा होस्ट कर्नेल कार्यक्षमता का लाभ उठाता है और एक सामान्य प्रक्रिया के रूप में चलता है। दूसरे शब्दों में, gVisor Linux को Linux के माध्यम से लागू करता है।
gVisor को बाहरी खतरों के खिलाफ कंटेनरों को मजबूत करने, अतिरिक्त अखंडता जांच प्रदान करने, या किसी सेवा के लिए पहुंच के दायरे को सीमित करने वाली तकनीकों और उपकरणों के साथ भ्रमित नहीं किया जाना चाहिए। किसी कंटेनर के लिए कौन सा डेटा उपलब्ध कराया जाता है, इसके बारे में हमेशा सावधान रहना चाहिए।
उपयोगकर्ता दस्तावेज़ीकरण और तकनीकी आर्किटेक्चर, जिसमें त्वरित शुरुआत गाइड शामिल हैं, gvisor.dev पर पाए जा सकते हैं।
gVisor x86_64 और ARM64 पर बनता है। अन्य आर्किटेक्चर भविष्य में उपलब्ध हो सकते हैं।
इन निर्देशों के प्रयोजनों के लिए, bazel और अन्य बिल्ड निर्भरताएँ एक बिल्ड कंटेनर में लिपटी हुई हैं। bazel का सीधे उपयोग करना संभव है, या मानक लक्ष्यों के लिए make help टाइप करें।
सुनिश्चित करें कि निम्नलिखित निर्भरताएँ स्थापित हैं:
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-bz2
मानक टेस्ट सूट चलाने के लिए, आप उपयोग कर सकते हैं:
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 के माध्यम से यूज़रस्पेस नेटवर्किंग) ताकि gVisor Go कोड को अपने 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 देखें।
ज्ञात उत्पादन उपयोगकर्ताओं और अपनाने वालों की सूची के लिए ADOPTERS.md देखें।
gvisor-users मेलिंग सूची और gvisor-dev मेलिंग सूची प्रश्नों और चर्चा के लिए अच्छे शुरुआती बिंदु हैं।
SECURITY.md देखें।
Contributing.md देखें।