تصور کنید برنامهای که امروز مینویسید، ۱۰۰۰ سال دیگر توسط تمدنهای آینده اجرا شود؛ در دنیای فعلی، این یک تخیل است چون سختافزارها و سیستمعاملهای ما پیش از آن نابود میشوند. یک باینری نرمافزاری از سال ۲۰۲۶ احتمالاً تا ۱۰۰۰ سال دیگر غیرقابل اجرا خواهد بود، زیرا سختافزار و سیستمعاملهای مورد نیاز برای بوت کردن آن از بین رفتهاند. Eternal Software Initiative (ESI) میخواهد این وضعیت را تغییر دهد و با تعریف معماری ماشینی چنان ساده که تمام مشخصاتش در یک دستمال کاغذی جای شود، پایان دهد «پوسیدگی بیتی» (Bit Rot). طبق مستندات این پروژه در مخزن گیتهاب که آخرین بار در ۶ ژوئیه ۲۰۲۶ بهروزرسانی شده است، هدف ایجاد استانداردی است که در برابر زمان مقاومت کند.
بیشتر نرمافزارهای مدرن را میتوان به ساختاری شبیه به یک برج از قطعات نامتجانس تشبیه کرد که بر روی پشتهای شکننده از درایورهای اختصاصی، کتابخانههای پیچیده و سختافزارهای مستندنشده بنا شدهاند. اگر یکی از قطعات پایین (مثل درایورهای اختصاصی یا سختافزار خاص) حذف شود، کل سازه میریزد. حتی شبیهسازهایی مثل QEMU هم این مشکل را حل نمیکنند، زیرا آنها تنها مشکل را جابهجا میکنند؛ چراکه خودشان به اکوسیستم پیچیده نرمافزاری عصر ما و پشتهایSimilarly پیچیده از وابستگیهای سختافزاری متکی هستند. سیستم ESI این شکنندگی را با جایگزینی یک معماری ماشین مینیمال بر پایه نسخه تغییریافتهای از Subleq (یک رایانه تکدستوری یا OISC) برطرف میکند.
همانطور که در تحلیلهای پیشین ما درباره تاریخچه سیستمهای توزیعشده اشاره کردیم، وابستگی به لایههای میانی همیشه نقطه ضعف پایداری بلندمدت بوده است. برای عملیاتی کردن این تئوری، تیم ESI یک زنجیره ابزار (Toolchain) کامل ساخته است. این مجموعه شامل یک بکاند کامپایلر LLVM، پورتی از هسته Linux و پورتهایی از کتابخانههای زمان اجرای C/C++ میشود. این سیستم به توسعهدهندگان اجازه میدهد نرمافزارهای موجود را در قالب یک «کپسول» (Capsule) مستقل و خودکفا بستهبندی کنند.
زمینه و هدف پروژه
این پروژه بهطور خاص برای مورخان آیندهی دور طراحی شده است. استدلال ESI این است که اگر باینری کپسول و «دستورالعملهای دستمال کاغذی» (Napkin Instructions) حفظ شوند، نرمافزار میتواند بدون داشتن هیچگونه دانشی از سیستمهای رایانهای امروز احیا شود. در واقع، فرض بر این است که دانش فعلی ما درباره کامپیوترها در آینده گم شده است.
مخزن گیتهاب این پروژه به عنوان ریشه اصلی این ابتکار عمل عمل میکند. این مخزن هر آنچه برای ساخت یک ماشین ESI و تبدیل نرمافزارهای موجود به کپسول لازم است را فراهم میکند. هدف نهایی این است که نرمافزار را به اندازه کافی قدرتمند نگه دارند تا بتواند هر برنامه مدرنی را بهطور بهینه نمایش دهد، اما در عین حال آنقدر ساده باشد که بتوان تمام جزئیات فنیاش را روی یک دستمال کاغذی نوشت.
جزئیات پیادهسازی فنی
بر اساس بررسی فنی زیرساختهای این اکوسیستم، اجزای کلیدی آن عبارتاند از:
- ماشین مجازی (VM): یک پیادهسازی مرجع که تقریباً در ۵۰ خط کد C نوشته شده است. جالب است که یک نسخه مینیمال شدهی ۳۶۶ بایتی از این ماشین مجازی، برنده رقابت ۲۹ام IOCCC (مسابقه کدگذاری مبهم بینالمللی) شده بود.
- محیطهای زمان اجرای هسته (Core Runtimes): ادغام uClibc-ng برای مدیریت زمان اجرای زبان C و استفاده از Busybox (با استفاده از پیکربندی
subleq_defconfig) برای فراهم کردن ابزارهای ضروری شل (Shell). - فرآیند بوت: یک ابزار سفارشی مبتنی بر پایتون با نام
make_boot_image.pyکه هسته لینوکس و یک initramfs را در قالب یک باینری کپسول قابل بوت بستهبندی میکند. این ابزار از پیکربندیهای خاص پشتیبانی میکند، مانند تنظیم اندازه استک (Stack Size) روی ۵۳۶,۸۷۰,۹۱۲. - تجريد سختافزاری: این ماشین مجازی برای پردازش پیکسلها و ورودیهای کیبورد از SDL3 (که از طریق
libsdl3-devنصب میشود) استفاده میکند. با این حال، در مستندات پروژه ذکر شده که در آینده هر روش سادهای برای ورودی/خروجی (I/O) میتواند جایگزین آن شود.
جزئیات زنجیره ابزار (Toolchain)
ساخت یک کپسول شامل یک گردشکار دقیق و سختگیرانه در هفت مرحله برای کامپایل متقاطع (Cross-compilation) است:
۱. بیلد LLVM: کامپایل پروژه LLVM مخصوص ESI با تارگتهایی مانند subleq-unknown-linux و شامل پروژههای clang و lld.
۲. هدرهای هسته: نصب هدرهای هسته لینوکس در یک مسیر sysroot مشخص با استفاده از دستور headers_install.
۳. زمان اجرای C: ساخت uClibc-ng به عنوان کتابخانه اصلی C.
۴. اجزای اصلی: ساخت CPU، FPU و ران-تایمهای ++C، شامل نصب libcxx از طریق ابزار ninja.
۵. ابزارهای Userland: کامپایل Busybox و قرار دادن آن در دایرکتوری initramfs_root/bin.
۶. اسمبل کردن هسته: استفاده از زنجیره ابزار LLVM مخصوص ESI برای بیلد کردن هسته لینوکس با پارامتر ARCH=subleq.
۷. نهاییسازی کپسول: اجرای ابزار پایتونِ بوت-ایمیج برای تولید فایل نهایی با پسوند .bootimage.
این فرآیند تضمین میکند که پس از ایجاد کپسول، تنها با داشتن مشخصات ساده (دستورالعملهای دستمال کاغذی)، محیط سختافزاری را میتوان از صفر بازسازی کرد. برای تسهیل کار و راحتی توسعهدهندگان، اسکریپت clang_userspace.sh امکان کامپایل سریع برنامههای ساده، مانند یک برنامه C با خروجی «Hello, ESI world!» را فراهم میکند.
همچنین برای کسانی که امکان اجرای ماشین مجازی را بهصورت محلی ندارند، یک پورت WebAssembly ارائه شده است که اجازه میدهد لینوکس ESI مستقیماً در مرورگر وب اجرا شود.
این رویکرد، هدف را از «سازگاری» (Compatibility) به «قابلیت بازیابی» (Recoverability) تغییر میدهد. در یک setup سنتی، شما برای اجرای یک برنامه به نسخه خاصی از ویندوز یا لینوکس نیاز دارید؛ اما در ESI، شما تنها به قوانین ریاضی پایه در CPU مبتنی بر Subleq نیاز دارید. این امر بهطور مؤثری بقای نرمافزار را از موفقیت تجاری هر فروشنده سختافزار خاص جدا میکند.
برای هر خواننده و توسعهدهندهای، این پروژه درسی در مینیمالیسم افراطی است. در حالی که جهان امروز به دنبال عاملهای پیچیده AI و مدلهای زبانی حجیمتر میدود، ESI ثابت میکند بادوامترین تکنولوژی، اغلب همان چیزی است که بتوان آن را با کمترین کلمات ممکن توصیف کرد. این سیستم نرمافزار را از یک دارایی دیجیتال تاریخمصرفدار به یک رکورد تاریخی دائمی تبدیل میکند.
گام بعدی شما
- برای تست سیستم، مخزن GitHub را با دستور
git clone --recurse-submodulesکلون کنید تا تمام زیر-ماژولها دریافت شوند. - اگر از لینوکس یا مک (با تغییرات لازم) استفاده میکنید، کتابخانه
libsdl3-devرا نصب کرده و ماشین مجازی را بیلد کنید. - سعی کنید یک برنامه ساده C بنویسید و آن را با
clang_userspace.shبه یک کپسول تبدیل کنید.
اما این مینیمالیسم سختافزاری تنها نیمی از داستان است؛ برای درک اینکه چگونه نرمافزارها در سطح لایههای انتزاعی میمیرند، تحلیل ما درباره «پوسیدگی دادهها در سیستمهای ابری» را بخوانید.




گفتگو