# JSLinux

> Clean Markdown view of GeekNews topic #20345. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20345](https://news.hada.io/topic?id=20345)
- GeekNews Markdown: [https://news.hada.io/topic/20345.md](https://news.hada.io/topic/20345.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-04-15T23:33:38+09:00
- Updated: 2025-04-15T23:33:38+09:00
- Original source: [bellard.org](https://bellard.org/jslinux/)
- Points: 4
- Comments: 1

## Topic Body

- 브라우저에서 **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 소프트웨어** 실행  
  
### 소스 코드 및 유사 프로젝트  
  
- RISC-V 버전 소스 코드는 **[TinyEMU](https://archive.md/o/Fk63W/https://bellard.org/tinyemu/)** 프로젝트에서 제공, 사전 컴파일된 설치 용이한 데모도 제공  
- 유사 프로젝트:  
  - **[jor1k](https://archive.md/o/Fk63W/https://s-macke.github.io/jor1k/demos/main.html)**: OpenRISC OR1K CPU 에뮬레이터  
  - **[v86](https://archive.md/o/Fk63W/https://copy.sh/v86/)**: PC 에뮬레이터  
  - **[angel](https://archive.md/o/Fk63W/https://sagark.org/angel/)**: RISC-V CPU 에뮬레이터

## Comments



### Comment 37237

- Author: ndrgrd
- Created: 2025-04-16T17:23:39+09:00
- Points: 1

CORS 설정이 잘못돼있어서 링크의 https://www.bellard.org/jslinux/ 가 아니라 https://bellard.org/jslinux/ 로 들어가야 정상적으로 작동하네요.
