- आम तौर पर PDF फ़ाइलों को स्थिर दस्तावेज़ समझना आसान है, लेकिन वास्तव में उनमें Javascript को सपोर्ट करने वाली कार्यक्षमता शामिल होती है
- PDF standard की अपनी Javascript standard library होती है
- Chromium, Firefox जैसे आधुनिक browsers सुरक्षा कारणों से केवल बेहद सीमित API ही implement करते हैं
- केवल Adobe Acrobat ही PDF के भीतर Javascript के पूरे spec को सपोर्ट करता है, और इसमें 3D rendering, HTTP requests, उपयोगकर्ता के सभी monitors का पता लगाना जैसी बहुत व्यापक क्षमताएँ शामिल हैं
- सीमित browser API के आधार पर भी इच्छित computation logic चलाया जा सकता है, लेकिन IO हिस्सा बहुत सीमित रहता है
- C code को asm.js में compile करके PDF के अंदर चलाया जा सकता है
- इसके लिए Emscripten का पुराना version (जैसे asm.js target को सपोर्ट करने वाला 1.39.20) इस्तेमाल किया गया है
- TinyEMU RISC-V emulator को संशोधित करके asm.js में compile किया गया और PDF में उसे चलाने की संरचना बनाई गई
- स्क्रीन output और input का तरीका DoomPDF (PDF के अंदर Doom चलाना) में इस्तेमाल किए गए तरीके जैसा ही है
- स्क्रीन के लिए एक लाइन को एक text field की तरह इस्तेमाल किया जाता है, और ASCII characters से pixel की स्थिति दिखाई जाती है
- input के लिए virtual keyboard और text box के माध्यम से VM को key input भेजा जाता है
- performance से जुड़ी बड़ी समस्याएँ आती हैं
- उदाहरण: Linux kernel boot होने में लगभग 30~60 सेकंड लगते हैं, और यह सामान्य execution की तुलना में 100 गुना से भी अधिक धीमा है
- Chrome PDF engine का V8 JIT disabled होने के कारण performance बहुत गिर जाती है
- root filesystem के लिए 64-bit या 32-bit विकल्प चुना जा सकता है
- default रूप से 32-bit Buildroot system (जो मूल TinyEMU example से लिया गया है) इस्तेमाल होता है
- 64-bit Alpine Linux version भी है, लेकिन वह लगभग 2 गुना अधिक धीमा है, इसलिए सामान्यतः उसका उपयोग नहीं किया जाता
4 टिप्पणियां
Doom जितनी पागलपन वाली Linux lmao
यह रोमांस है या पागलपन, हे भगवान
वाह...
वाह......