1. 개발 배경
Boson으로 시작했다
스피논(Spinon)은 2026년 9월 26일에 저장소가 열렸다. 첫 커밋 제목은 chore: initialize Boson repository이고, 그때 README는 다섯 줄이었다.
Boson은 웹과 유사한 개발 경험으로 모바일 앱을 만드는 멀티플랫폼 UI 프레임워크 실험입니다. 현재 아키텍처와 공개 API는 확정되지 않았습니다.
첫 번째 언어 선택 실험: V8 연동 비교
이름은 이튿날 명세와 구현 계획을 정리하는 커밋에서 Spinon으로 바뀌었다. 첫날 만든 실험 폴더(spikes/)에는 아직 dev.boson.* 같은 옛 식별자가 남아 있다. GitHub 저장소 설명은 "스피논: 웹 문법으로 모바일과 웹 앱을 만드는 GPU 기반 UI 프레임워크 실험"이다.
저장소 문서에는 '왜 시작했는가'를 풀어 쓴 대목이 없다. 대신 '무엇을 만들려 하는가'와 '그걸 어떻게 확인할 것인가'가 아주 자세하게 적혀 있다. 이 글도 그 범위 안에서만 정리한다.
무엇을 하려는가
명세 0001의 첫 문단이 제품 경계다.
스피논은 같은 앱 작성 소스를 웹 DOM과 모바일 GPU UI 경로로 빌드하는 프레임워크다. 모바일은 브라우저 문서·DOM 전체·Web API 전체를 구현하지 않는다. 대신 Rust UI 트리에 연결하는 제한된 DOM API façade를 제안하며 (…) Android와 iOS의 일반 UI 노드는 각각의 플랫폼 뷰와 1:1로 대응하지 않는다. WebView는 명시적인 별도 컴포넌트다.
풀어 보면 이렇다.
- 앱 코드는
div,button같은 HTML 태그 이름과 CSS로 쓴다. React·Vue·Svelte는 어댑터로 붙이고, 첫 적합성 대상은 React·Vite·단일 모바일 번들이다. - 웹에서는 그대로 브라우저 DOM을 쓴다.
- 모바일에서는 브라우저를 넣지 않는다. JavaScript는 V8로 돌리고, 문서 트리·스타일·레이아웃은 Rust 코어가 계산하며, 주 화면은 GPU로 직접 그린다.
- 노드마다 Android View나 UIKit View를 만들지 않는다. 지도·카메라·WebView 같은 시스템 기능만 별도 플랫폼 컴포넌트로 끼운다.
코어 아키텍처 결정은 이걸 한 줄로 못 박는다. "공통 UI 코어의 기준 언어는 Rust로 한다. 모바일 주 화면은 GPU로 출력하며, Android·iOS의 공통 GPU API로 wgpu를 채택한다." 바로 뒤에 "이 결정은 렌더링 API 선택이며 성능 우위를 입증한 결과는 아니다"라는 단서가 붙는다.
첫날은 네이티브 뷰였다
흥미로운 건 첫날 PoC가 GPU가 아니었다는 점이다. 9월 26~27일의 실험들은 V8에서 돈 JavaScript가 Rust 트리를 바꾸고, 그 결과를 Android TextView·Button과 iOS UILabel·UIButton에 적용했다. 9월 27일 명세 정리에서 "모바일 주 화면은 GPU"로 방향을 정했고, 기존 네이티브 뷰 PoC는 "트리·이벤트 경계와 성능 비교 자료로 보존"하기로 했다. 자세한 과정은 3-1에 있다.
누구와 견주나
성능 비교 계획은 같은 화면을 네 가지로 구현해 비교하겠다고 적는다.
다만 이 비교는 아직 계획이다. 상태 대장의 "S09 첫 네 구현 비교"도 미완료다. 결과는 "전체 앱 경로의 비교로 해석한다"는 단서까지 미리 적어 두었다.
근거부터 정하는 저장소
스피논 문서를 읽으면 기능보다 규칙이 먼저 눈에 들어온다.
- 명세 인덱스는 첫머리에 "현재 파일은 구현 완료 선언이 아니다"라고 적는다.
- 상태 대장은 78개 상위 항목을 두고, 10월 4일 기준 맨 위에 "현재 제품 지원 완료: 없음"이라고 적는다. 체크 표시가 붙은 상위 항목은 R10(Taffy 실험)·R13(GPU 복구 실험)·R15(OTA 모델 초안)·S01(Rust 트리 코어 라이브러리) 넷이고, 모두 실험·설계·내부 라이브러리 범위다.
- 기능을 구현하기 전에 비교 모델을 먼저 정한다. 기준 구현(주로 고정 버전 Chromium), 재현 입력, 관찰값, 판정 규칙을 결과를 보기 전에 적어 둔다. "구현 코드 자신을 유일한 기대값 원본으로 삼지 않는다."
- 프로젝트 규칙은 PoC에서 확인한 동작과 제품 기능을 구분하고, 성능 주장에는 기기·빌드·입력 조건과 원본 로그를 붙이며, 시뮬레이터 결과와 실기기 결과를 나눠 적으라고 한다.
그래서 이 연재에 나오는 거의 모든 결과에도 "시뮬레이터에서", "고정 fixture에서", "내부 시제품"이라는 꼬리표가 붙는다. 저장소가 스스로 그렇게 적고 있기 때문이다.
웹 문법(HTML 태그·CSS)으로 쓴 앱을 웹에서는 DOM으로, 모바일에서는 V8 + Rust 코어 + GPU 화면으로 돌리려는 UI 프레임워크 실험이다. 10월 4일 기준 공식 상태는 "제품 지원 완료: 없음"이며, 지금은 PoC와 명세로 경계를 하나씩 검증하는 단계다.