تطبیق دبیان برای استفاده از اجرای Rust coreutils

سیلوستر لدرو، که به خاطر ساختن دبیان گنو/لینوکس با استفاده از کامپایلر Clang شناخته می‌شود، یک آزمایش موفقیت‌آمیز را با استفاده از مجموعه‌ای دیگر از ابزارها، کوروتیل‌ها، بازنویسی شده به زبان Rust گزارش کرد. Coreutils شامل ابزارهایی مانند sort، cat، chmod، chown، chroot، cp، date، dd، echo، hostname، id، ln و ls است. برای مرحله اول ادغام با Debian نسخه Rust از coreutils، اهداف زیر تعیین شد:

  • یک جایگزین Rust برای coreutils برای دبیان و اوبونتو بسته بندی کنید.
  • بوت کردن دبیان با دسکتاپ گنوم با استفاده از rust-coreutils.
  • نصب 1000 بسته محبوب از مخزن.
  • از فایرفاکس، LLVM/Clang و منابع هسته لینوکس در محیطی با rust-coreutils بسازید.

پس از ایجاد بیش از 100 پچ برای Rust/coreutils، توانستیم با موفقیت به تمام اهداف مورد نظر دست یابیم. کار در حال انجام شامل اجرای ابزارها و گزینه های از دست رفته، بهبود کیفیت و یکنواختی کد، توسعه مجموعه آزمایشی، و حذف خرابی هایی است که هنگام اجرای مجموعه آزمایشی از GNU Coreutils رخ می دهد (141 تست از 613 تا کنون با موفقیت اجرا شده اند. ).

هنگام ایجاد بسته rust-coreutils، تصمیم بر این شد که بسته Coreutils جایگزین نشود، بلکه امکان کار موازی برای آنها فراهم شود. گزینه های Utility در زبان Rust در /usr/lib/cargo/bin/ نصب می شوند و با افزودن این دایرکتوری به متغیر محیطی PATH فعال می شوند. ایجاد بسته rust-coreutils به دلیل نیاز به دانلود تمام وابستگی‌های ساخت در مخزن، از جمله Rust و بسته‌های مختلف جعبه کوچک، پیچیده بود.

ایجاد یک تصویر بوت مشکلی نبود، اما تطبیق بسته‌ها برای محیطی با rust-coreutils نیاز به کار زیادی داشت، زیرا بسیاری از اسکریپت‌های پس از نصب، ابزارهای کمکی را از مجموعه coreutils فراخوانی می‌کنند. بیشترین تعداد مشکلات ناشی از عدم وجود گزینه های ضروری بود، به عنوان مثال، ابزار "cp" گزینه های "--archive" و "--no-dereference" را نداشت، "ln" از "-" پشتیبانی نمی کرد. گزینه نسبی، mktemp از "-t" پشتیبانی نمی کند، در همگام سازی "-fs"، در نصب - "--owner" و "-group". مشکلات دیگری به دلیل تفاوت در رفتار به وجود آمد، به عنوان مثال، ابزار نصب از مشخص کردن /dev/null به عنوان یک فایل ورودی پشتیبانی نمی‌کرد، mkdir گزینه «--parents» را به جای «-parent» و غیره داشت.

هنگام آزمایش مونتاژ پایه های کد بزرگ، هیچ مشکل عمده ای ایجاد نشد. هنگام ساخت فایرفاکس و LLVM/Clang، از اسکریپت های پایتون و cmake استفاده می شود، بنابراین جایگزینی coreutil ها بر آنها تأثیری نداشت. ساخت هسته لینوکس نسبتاً راحت پیش رفت و تنها دو مشکل ظاهر شد: خروجی خطا هنگام استفاده از chown با پیوند نمادین و عدم وجود گزینه "-n" در ابزار ln.

منبع: opennet.ru

اضافه کردن نظر