17P by xguru 16일전 | ★ favorite | 댓글 4개
  • 일반적으로 PDF 파일이 정적인 문서라고 생각하기 쉬우나, 사실 Javascript를 지원하는 기능이 포함되어 있음
    • PDF 표준은 독자적인 Javascript 표준 라이브러리를 가지고 있음
    • Chromium, Firefox 같은 현대 브라우저는 보안상의 이유로 극히 제한된 API만 구현하고 있음
  • Adobe Acrobat만이 PDF 내 Javascript의 전체 스펙을 지원했으며, 3D rendering, HTTP 요청, 사용자의 모든 모니터 감지 등 매우 광범위한 기능을 포함하고 있음
  • 제한된 브라우저 API를 기반으로도 원하는 계산 로직은 수행 가능하나, IO 부분은 매우 제한적임
  • C 코드를 asm.js로 컴파일하여 PDF 내부에서 실행 가능함
    • 오래된 버전의 Emscripten(asm.js 타겟을 지원하는 1.39.20 등)을 사용함
    • TinyEMU RISC-V 에뮬레이터를 수정하여 asm.js로 컴파일하고, PDF에서 이를 실행하는 구조
  • 화면 출력과 입력 방식은 DoomPDF(PDF내에서 둠 실행하기)에 사용했던 것과 동일함
    • 화면은 한 줄을 하나의 텍스트 필드로 사용하고, ASCII 문자로 픽셀 상태를 표현함
    • 입력은 가상 키보드와 텍스트 박스를 통해 VM에 키 입력을 전달함
  • 성능상의 문제가 크게 발생
    • 예: Linux 커널 부팅에 30~60초 정도 걸리며, 일반적 실행 대비 100배 이상 느림
    • Chrome PDF 엔진의 V8은 JIT가 비활성화되어 있어 성능이 크게 저하됨
  • 루트 파일시스템은 64비트 또는 32비트용을 선택 가능함
    • 기본은 32비트 Buildroot 시스템(원래 TinyEMU 예제에서 가져온 것)을 사용함
    • 64비트 Alpine Linux 버전도 있으나, 성능이 약 2배 더 느려 일반적으로는 사용하지 않음

이것은 낭만인가 광기인가 ㅎㄷㄷㄷ

둠 만큼의 광기 리눅슼ㅋㅋ