इस प्रोजेक्ट के बारे में

Containerization, Apple का एक Swift पैकेज है जो अनुप्रयोगों को macOS पर Linux कंटेनर चलाने की सुविधा देता है। यह Apple silicon पर Apple के Virtualization.framework पर आधारित है और पूरे कंटेनर जीवनचक्र के लिए APIs का एक सेट प्रदान करता है। मुख्य क्षमताओं में OCI इमेज का प्रबंधन और दूरस्थ रजिस्ट्रियों के साथ इंटरैक्शन, ext4 फ़ाइल सिस्टम बनाना और भरना, Netlink सॉकेट परिवार के साथ इंटरैक्शन, तेज़ बूट समय के लिए अनुकूलित Linux कर्नेल बनाना, हल्के वर्चुअल मशीनों को स्पॉन करना और रनटाइम वातावरण का प्रबंधन, कंटेनरीकृत प्रक्रियाओं को स्पॉन करना और उनके साथ इंटरैक्शन, तथा Apple silicon पर linux/amd64 कंटेनर चलाने के लिए Rosetta 2 का उपयोग शामिल है। डिज़ाइन की दृष्टि से, प्रत्येक Linux कंटेनर अपनी स्वयं की हल्की वर्ुअल मशीन के अंदर चलता है। क्लांट प्रत्येक कंटेनर के लिए समर्ित IP पते निर्दिष्ट कर सकते हैं, जिससे व्यक्तित पोर् फ़ॉरवर्डिंग की आवश्यकता समाप्त हो जाती है। अनुकूलित Linux कर्नेल कॉन्फ़िगरेशन और एक हल्के init सिस्टम वाले न्यूनतम रूट फ़ाइल सिस्टम के कारण कंटेनर उप-सेकंड स्टार्ट समय प्राप्त करते हैं। vminitd उपप्रोजेक्ट एक छोटा init सिस्टम है जिसे VM के अंदर प्रारंभिक प्रक्रिया के रूप में स्पॉन किया जाता है; यह vsock पर एक gRPC API प्रदान करता है ताकि रनटाइम वातावरण को कॉन्फ़िर किया जा सके और कंटेनरीकृत प्रक्रियाएँ लॉन्च की जा सकें, और यह I/O, सिग्नल और इवेंट को कॉलिंग प्रक्रिया को वापस भेजता है। यह प्रोजेक्ट VMM को VirtualMachineManager / VirtualMachineInstance प्रोटोकॉल के पीछे अमूर्त करता है और दो बैकएंड प्रदान करता है। macOS बैकएंड सीधे Virtualization.framework (VZVirtualMachineManager) का उपयोग करता है और इसके लिए किसी अतिरिक्त बानरी की आवश्यकता नहीं होती। Linux बैकएंड cloud-hypervisor के साथ KVM (CHVirtualMachineManager) का उपयोग करता है, प्रत्येक VM के लिए एक cloud-hypervisor उपप्रक्रिया चलाता है जिसे उसके REST-on-UDS API के माध्यम से नियंत्रित किया जाता है, ब्लॉक स्टोरेज के लिए virtio-blk, साझा निर्देशिकाओं के लिए virtio-fs (प्रत्येक शेयर के लिए एक virtiofsd), नेटवर्किंग के लिए TAP, और macOS पथ के समान vminitd अनुबंध तक पहुँचने के लिए cloud-hypervisor के हाइब्रिड vsock का उपयोग करता है। Linux बैकएंड के लिए होस्ट पर cloud-hypervisor और virtiofsd, KVM पहुँच, और नेटवर्किंग के लिए पूर्व-तैयार TAP/bridge/NAT प्लंबिंग की आवश्यकता होती है। पैकेज बनाने के लिए आवश्यकताएँ हैं Apple silicon वाला Mac, macOS 26, और Xcode 26; पुराने macOS संस्करण समर्थित नहीं हैं। Linux गेस्ट init (vminitd/vmexec) को Mac पर क्रॉस-कंपाइल करने के बजाय एक Linux कंटेनर के अंदर स्थिर बाइनरी के रूप में कंपाल किया जाता है, इसलिए होस्ट पर किसी Swift टूलचेन या Static Linux SDK की आवश्यकता नहीं होती — इसके बजाय apple/container CLI का उपयोग किया जाता है। cctl एक्ज़ीक्यूटेबल API की खोज के लिए एक प्लेग्राउंड के रूप में कार्य करता है, जिसमें OCI इमेज में हेरफेर करने, रजिस्ट्रियों में लॉग इन करने, रूट फ़ाइल सिस्टम ब्लॉक बनाने, और सरल Linux कंटेनर चलाने के लिए कमांड हैं। macOS पर हल्के VM स्पॉन करने के लिए एक Linux कर्ेल आवश्यक है। रिपॉज़िटरी में kernel/ निर्देशिका में एक अनुकूलित कर्नेल कॉऩ्िगरेशन शामिल है, जिसमें इसे कंपाइल करने के लिए एक कंटेनरीकृत बिल्ड वातावरण है। यह कॉन्फ़िगरेशन तेज़ स्टार्ट समय और हल्के वातावरण का समर्थन करने के लिए न्यूनतम है, और Containerization प्रति-कंटेनर आधार पर विभिन्न कर्नेल कॉऩ्िगरेशन और संस्करणों का उपयोग करने के लिए प्रथम-श्रेणी के APIs प्रदान करता है। उपयोगकर्ता-प्रदत्त कर्नेल समर्थित हैं, और कार्यक्षमता कर्नेल संस्करण 6.14.9 से परीक्षित है। पूर्व-निर्मित कर्ेल में VIRTIO ड्राइवर कर्नेल में कंपाइल किए गए होने चाहिए (केवल मॉड्यूल के रूप में नहीं); Kata Containers प्रोजेक्ट एक उपयुक्त कर्नेल प्रदान करता है। बिल्ड और परीक्षण वर्कफ़्लो: अनुशंसित Xcode इंस्टॉल करें, सक्रिय डेवलपर निर्देशिका सेट करें, apple/container CLI इंस्टॉल करें, फिर बिल्ड के लिए `make all` और परीक्षण चलाने के लिए `make test integration` चलाएँ। एकीकरण परीक्षणों के लिए एक कर्नेल आवश्यक है; `make fetch-default-kernel` एक डि़ॉल्ट कर्नेल प्राप्त करता है। Protobuf इंटरफ़ेस `make protos` के साथ पुनर्नित किए जा सकते हैं, `make pre-commit` के साथ एक pre-commit हुक इंस्टॉल किया जा सकता है, और API दस्तावेज़ीकरण स्थानीय रूप से `make docs` और `make serve-docs` के सा उत्पन्न किया जा सकता है। यह प्रोजेक्ट संस्करण 0.1.0 पर है, जो पहली आधिकारिक रिलीज़ है। स्रोत स्थिरता केवल माइनर संस्करणों के भीतर गारंटीकृत है (उदाहरण के लिए, 0.1.1 और 0.1.2 के बीच); जो उपभोक्ता संभावित रूप से स्रोत-तोड़ने वाले अपडेट से बचना चाहते हैं, वे .upToNextMinorVersion(from: "0.1.0") के साथ निर्भरताएँ पिन कर सकते हैं। CONTRIBUTING.md फ़ाइल के माध्यम से योगदान का स्वागत है।