JSLinux
(bellard.org)- 브라우저에서 Linux와 Windows NT를 실행할 수 있는 JavaScript/WASM 기반 PC 에뮬레이터로, Fabrice Bellard가 2011년 최초 x86 JS 에뮬레이터로 시작해 현재까지 발전시켜 온 프로젝트
- TinyEMU 기반 C 코드를 emscripten으로 컴파일하며, VirtIO 디바이스를 활용해 파일시스템·네트워크·블록 디바이스를 지원
- x86 64비트 CPU 에뮬레이션은 AVX-512, APX 등 최신 확장 명령어까지 포함하는 높은 완성도
- RISC-V 32/64비트 CPU 에뮬레이션도 지원하며, Alpine Linux, Buildroot 등 다양한 배포판 실행 가능
- JavaScript 엔진의 성능 벤치마킹, 브라우저 내 Unix 학습, 레거시 PC 소프트웨어 실행 등 실용적 활용 사례 보유
역사
- 2011년 최초 버전은 JavaScript로 작성된 최초의 PC/x86 에뮬레이터로, QEMU의 x86 헬퍼와 디바이스 코드를 재활용
- 2015년 asm.js 서브셋을 적용해 이를 지원하는 브라우저에서 속도 향상 달성
- 2016년 RISC-V 에뮬레이터인 TinyEMU를 작성한 후, C 코드를 emscripten으로 JavaScript 변환
- jor1k(Sebastian Macke)에서 영감받은 VirtIO 9P 파일시스템을 추가해 원격 파일시스템 접근 및 파일 import/export 용이
- VirtIO 디바이스를 x86 JS 에뮬레이터에도 재활용하기 위해, JSLinux asm.js 코드를 C로 변환 후 다시 emscripten으로 JavaScript로 재변환하는 과정을 거침
- 세밀한 튜닝을 통해 수작업 asm.js 버전보다 더 빠른 성능 달성
- Windows NT 실행을 위해 초기에는 에뮬레이트된 Linux 내부에서 QEMU를 중첩 실행하는 방식 사용
- x86 에뮬레이터가 AMD SVM 가상화 확장을 지원하므로 중첩 실행에서도 사용 가능한 수준
- 현재 버전은 PS/2 키보드/마우스, IDE 디스크, 더미 VGA 등 누락된 PC 디바이스를 직접 에뮬레이션하여 Windows NT를 네이티브로 실행
x86 CPU 에뮬레이션
-
x86 CPU 에뮬레이션으로, 다음 기능 지원:
- 펜티엄 클래스 CPU
- x87 80비트 부동소수점(bit exact)
- PAE
- CMOV 명령들
- MMX, SSE2 지원
- AMD SVM 가상 머신 확장(Nested Page Table 지원)
- RDPMC를 통한 명령어 카운트 읽기
- 알려진 제한사항:
- 메모리 접근 시 세그먼트 제한 및 권한 검사 미수행
- 디버그 미지원(DRx 레지스터)
에뮬레이트 디바이스
- 8259 PIC(Programmable Interrupt Controller)
- 8254 PIT(Programmable Interrupt Timer)
- 16450 UART(디버그 전용)
- Real Time Clock
- PCI 버스
- VirtIO 콘솔, 9P 파일시스템, 네트워크, 블록 디바이스, 입력
- Simple framebuffer
- IDE 컨트롤러, PS/2 키보드/마우스, 더미 VGA 디스플레이(각각 선택사항)
RISC-V CPU 에뮬레이션
- 32비트 또는 64비트 RISC-V CPU 에뮬레이션, 64비트 FPU 및 압축 명령어(compressed instructions) 지원
- 현재 RISC-V 64비트 Buildroot 및 Fedora 배포판 제공
- RISC-V 32비트 이미지는 여전히 사용 가능하나 더 이상 적극 유지보수되지 않음
- buildroot-riscv32 콘솔 버전 및 X Window 버전 제공
성능
- 2017년 기준 일반 데스크톱 PC에서 Firefox 브라우저 사용 시, x86 에뮬레이터가 약 100 MIPS로 실행
- 내장
vmtime유틸리티를 통해 상세 벤치마크 수행 가능
JavaScript 터미널
- 원래 JSLinux 터미널의 개선 버전으로, 스크롤바 및 URL 하이라이팅 지원
Linux 배포판
- Alpine Linux와 Buildroot 배포판 사용
- vfsync, qemacs, tcc 등 커스텀 패키지 추가
- Fluxbox 윈도우 매니저를 통한 선택적 X Window 지원
네트워킹
- 에뮬레이터 내부에서 인터넷 접속 가능
- Benjamin Burns가 제공하는 websocket VPN 사용
- 대역폭 40 kB/s 제한, 공용 IP당 최대 2개 연결 허용
용도
- JavaScript 엔진 벤치마킹(예: Linux 부팅 소요 시간 측정) 및 asm.js, WASM 등 새로운 브라우저 기술 활용
- 브라우저를 벗어나지 않고 커맨드 라인 Unix 도구 학습
- 브라우저 내 안전한 파일 접근(vfsync)
- 레거시 PC 소프트웨어 실행
소스 코드 및 유사 프로젝트
CORS 설정이 잘못돼있어서 링크의 https://www.bellard.org/jslinux/ 가 아니라 https://bellard.org/jslinux/ 로 들어가야 정상적으로 작동하네요.