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

gVisor चल रहे एप्लिकेशन और होस्ट ऑपरेटिंग सिस्टम के बीच आइसोलेशन की एक मज़बूत परत प्रदान करता है। यह एक एप्लिकेशन कर्नेल है जो Linux जैसा इंटरफ़ेस लागू करता है। Linux के विपरीत, यह मेमोरी-सुरक्षित भाषा (Go) में लिखा गया है और यूज़रस्पेस में चलता है।
gVisor में ओपन कंटेनर इनिशिएटिव (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
मानक परीक्षण सुइट्स चलाने के लिए, आप इसका उपयोग कर सकते हैं:
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 देखें।