طالب يتمكن من تشغيل نسخة من نظام Linux داخل ملف بصيغة PDF

⬤ نجح طالب في الثانوية في تشغيل نظام Linux داخل ملف PDF باستخدام لغة برمجة JavaScript.
⬤ رغم قيود المتصفحات، استغل المطور JavaScript لتشغيل الألعاب والأنظمة داخل الملف لكن ببطء شديد.
⬤ يعد تشغيل البرمجيات في بيئات صعبة تحدياً معروفاً لدى المبرمجين، وأشهره تشغيل لعبة Doom على أجهزة متنوعة.
في مطلع الشهر الماضي، استغل أحد المطورين دعم JavaScript في ملفات PDF لتشغيل لعبة Tetris داخل مستند يفترض أن يكون ثابت المحتوى. ولم يمضِ سوى أيام بعدها حتى نجح أدينغ 2210، المبرمج والطالب في المرحلة الثانوية في تطوير هذا الاختراق ليشغل لعبة Doom داخل ملف PDF. واليوم، قام المطور ذاته بتوسيع نطاق مشروعه ليشمل تشغيل نظام التشغيل Linux بالكامل داخل الملف نفسه.
تمكن أدينغ 2210 من محاكاة تشغيل نظام Linux ضمن هذا التنسيق الشائع. ورغم محدودية الأداء، يعيد هذا المشروع تعريف الإمكانات المتاحة عبر أدوات JavaScript في PDF. ويمكن للمستخدمين تجربة المحاكي (الرابط هنا) عبر متصفحات Chromium مثل Chrome وEdge وOpera، كما يتوفر الكود المصدري على صفحة المطور في GitHub.
يعتمد LinuxPDF على بنية مجموعة تعليمات RISC-V المبنية على محاكي TinyEMU، ويشترك في بنيته الداخلية مع مشروع DoomPDF السابق للمطور ذاته. إذ تعتمد آلية الإدخال نفس الأسلوب الذي تم تطبيقه أولاً في حيلة Tetris PDF، حيث يُعاد توظيف كود DoomPDF. وهنا، بمقدور المستخدمين النقر على الأزرار الافتراضية أسفل الشاشة الرئيسية، لكن الغالبية ستفضل استخدام لوحة المفاتيح مباشرة، حيث تتم معالجة الإدخالات من خلال حقل نصي.
على الرغم من أن تنسيق PDF مصمم أساساً لعرض النصوص والصور، فإنه يدعم تشغيل كود JavaScript، ما يتيح إمكانيات مثل عرض الرسوميات ثلاثية الأبعاد، واكتشاف الشاشات، وإرسال طلبات HTTP.
تستخدم ملفات PDF التي تعمل في المتصفحات إصداراً محدوداً من JavaScript، لكنه لا يزال كافياً لتشغيل الألعاب وحتى أنظمة التشغيل. وقد اكتشف أدينغ 2210 أن نسخة قديمة من مترجم Emscripten تستهدف تعليمات asm.js بدلاً من معيار WebAssembly، ما يسمح بترجمة كود لغة C ليعمل ضمن تنسيق PDF.
كما هو الحال مع DoomPDF، يعاني المحاكي من أداء بطيء للغاية، حيث يستغرق إقلاع النواة ما يقارب دقيقة كاملة، أي أكثر بمئة مرة من سرعة تشغيل نظام Linux تقليدي. وأوضح المطور أن هذا القيد عصي عن التجاوز، نظراً لاستخدام متصفحات Chromium إصداراً من محرك V8 لا يدعم المترجم الفوري JIT.
يعمل نظام الملفات افتراضياً بمعمارية 32-bit، لكن بوسع المستخدمين إنشاء نسخة 64-bit عبر استنساخ الكود المصدري ضمن بيئة Linux فعلية، وتعديل سطر BITS، ومن ثم تحميل إصدار 1.39.20 من Emscripten. لكن بطبيعة الحال، يؤدي تشغيل نسخة 64-bit إلى تراجع الأداء إلى النصف.