Представлен проект LinuxPDF — Linux в PDF в браузере

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Разработчик под ником ading2210 представил проект LinuxPDF — Linux в PDF в браузере. Проект открывается только в браузерах на базе Chromium, использующих движок PDFium. Код написан на C и опубликован на GitHub по лицензией GNU General Public License v3.0.

«Это Linux, работающий внутри PDF‑файла через эмулятор RISC‑V, основанный на TinyEMU», — пояснил автор решения.

Это работает очень похоже на мой предыдущий проект DoomPDF.

Можно было бы ожидать, что файлы PDF будут состоять только из статических документов, но, как ни странно, формат файла PDF поддерживает Javascript с собственной отдельной стандартной библиотекой.

Современные браузеры (Chromium, Firefox) реализуют это как часть своих движков PDF. Однако API, доступные в браузере, гораздо более ограничены.

Полная спецификация для JS в PDF была реализована только Adobe Acrobat, и она содержит некоторые нелепые вещи, такие как возможность выполнять 3D-рендеринг, делать HTTP-запросы и обнаруживать каждый монитор, подключенный к системе пользователя. Однако в Chromium и других браузерах была реализована только крошечная часть этого API из-за очевидных проблем безопасности. Благодаря этому мы можем выполнять любые вычисления, которые захотим, просто с очень ограниченным вводом-выводом.

Код C можно скомпилировать для запуска в PDF с использованием старой версии Emscripten, которая нацелена на asm.js вместо WebAssembly. С его помощью я могу скомпилировать модифицированную версию эмулятора TinyEMU RISC-V в asm.js, который можно запустить в PDF. Для ввода и вывода я повторно использовал тот же код отображения, который я использовал для DoomPDF. Он работает, используя отдельное текстовое поле для каждой строки пикселей на экране, содержимое которого задаётся различными символами ASCII. Для ввода есть виртуальная клавиатура, реализованная с кучей кнопок, и текстовое поле, в котором вы можете ввести текст, чтобы отправить нажатия клавиш в виртуальную машину.

Самая большая проблема здесь связана с производительностью эмулятора. Например, ядру Linux требуется около 30-60 секунд для загрузки в PDF, что более чем в 100 раз медленнее, чем обычно. К сожалению, нет способа исправить это, поскольку версия V8, которую использует движок PDF Chrome, имеет отключённый JIT-компилятор, что разрушает его производительность.

Для корневой файловой системы возможны как 64-, так и 32-битные версии. По умолчанию используется 32-битная система buildroot (которая была предварительно собрана и взята из оригинальных примеров TinyEMU), а также 64-битная система Alpine Linux. Однако 64-битный эмулятор примерно в два раза медленнее, поэтому обычно он не используется.

Ранее ading2210 представил проект DoomPDF — это Doom в PDF в браузере.

В начале января разработчик Томас Ринсма выпустил проект pdftris — это тетрис в PDF в браузере.

Источник: https://habr.com/ru/news/878542/


Интересные статьи

Интересные статьи

В 2023 году крупнейшие IT-компании мира продолжили затягивать пояса: сокращать зарплаты и персонал. В то же время прошло более года с начала потрясений в экономике страны после февраля 2022 года и мас...
Евгений Петриченко пришел в Битрикс24 студентом. За 16 лет в компании он прошел путь от специалиста техподдержки до эксперта по мобильной разработке. И ни разу не думал сменить место работы.  ...
В сфере металлообработки есть популярная операция - лазерная резка. Узким местом в цикле обработки заказа здесь может являться расчет. Он хоть и не сложный, но обычно выполняется вручную. А это означа...
Всем привет! Не так давно на работе в рамках тестирования нового бизнес-процесса мне понадобилась возможность авторизации под разными пользователями. Переход в соответствующий р...
С версии 12.0 в Bitrix Framework доступно создание резервных копий в автоматическом режиме. Задание параметров автоматического резервного копирования производится в Административной части на странице ...