প্রকল্প সম্পর্কে

কন্টেইনারাইজেশন হল Apple-এর একটি Swift প্যাকেজ যা অ্যাপ্লিকেশনগুলিকে macOS-এ Linux কন্টেইনার চালাতে দেয়। এটি Apple silicon-এ Apple-এর Virtualization.framework-এর উপর নির্মিত এবং সম্পূর্ণ কন্টেইনার জীবনচক্রের জন্য API-এর একটি সেট প্রকাশ করে। মূল ক্ষমতাগুলির মধ্যে রয়েছে 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 এবং একই vminitd চুক্তিতে পৌঁছানোর জন্য cloud-hypervisor-এর হাইব্রিড vsock ব্যবহার করে। Linux ব্যাকএন্ডের জন্য হোস্টে cloud-hypervisor এবং virtiofsd, KVM অ্যাক্সেস এবং নেটওয়ার্কিংয়ের জন্য প্রি-স্টেজড TAP/ব্রিজ/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 প্রতি-কন্টেইনার ভিত্তিতে বিভিন্ন কার্নেল কনফিগারেশন এবং সংস্করণ ব্যবহার করার জন্য প্রথম-শ্রেণীর API প্রদান করে। ব্যবহারকারী-প্রদত্ত কার্নেল সমর্থিত, কার্যকারিতা কার্নেল সংস্করণ 6.14.9 থেকে পরীক্ষা করা হয়েছে। প্রি-বিল্ট কার্নেলগুলিতে অবশ্যই VIRTIO ড্রাইভার কার্নেলে কম্পাইল করা থাকতে হবে (শুধু মডিউল হিসাবে নয়); Kata Containers প্রকল্প একটি উপযুক্ত কার্নেল সরবরাহ করে। বিল্ড এবং টেস্ট ওয়ার্কফ্লো: প্রস্তাবিত Xcode ইনস্টল করুন, সক্রিয় ডেভেলপার ডিরেক্টরি সেট করুন, apple/container CLI ইনস্টল করুন, তারপর বিল্ড করতে `make all` এবং টেস্ট চালাতে `make test integration` চালান। ইন্টিগ্রেশন টেস্টের জন্য একটি কার্নেল প্রয়োজন; `make fetch-default-kernel` একটি ডিফল্ট কার্নেল আনে। প্রোটোবাফ ইন্টারফেস `make protos` দিয়ে পুনরায় তৈরি করা যেতে পারে, একটি প্রি-কমিট হুক `make pre-commit` দিয়ে ইনস্টল করা যেতে পারে এবং API ডকুমেন্টেশন `make docs` এবং `make serve-docs` দিয়ে স্থানীয়ভাবে তৈরি করা যেতে পারে। প্রজেক্টটি সংস্করণ 0.1.0-এ রয়েছে, প্রথম অফিসিয়াল রিলিজ। সোর্স স্থিতিশীলতা শুধুমাত্র ছোট সংস্করণের মধ্যে নিশ্চিত করা হয় (উদাহরণস্বরূপ, 0.1.1 এবং 0.1.2 এর মধ্যে); যে ভোক্তারা সম্ভাব্য সোর্স-ব্রেকিং আপডেট এড়াতে চান তারা .upToNextMinorVersion(from: "0.1.0") দিয়ে নির্ভরতা পিন করতে পারেন। CONTRIBUTING.md ফাইলের মাধ্যমে অবদান স্বাগত।