Native Shell(NSH)과 GPUI Kit 차이, 어떤 앱에 맞고 무엇을 포기하나
GPUI Kit은 Zed의 gpui 위에 버튼, 표, 코드 편집기 같은 부품을 75개 넘게 얹은 데스크톱 앱용 Rust 프레임워크임. 예전 이름은 gpui-component
Native Shell(NSH)은 앱 하나를 iOS, 안드로이드, macOS, Windows, Linux, 웹에 띄우는 Rust 프레임워크임. 화면을 직접 그리지 않고 운영체제에 원래 있는 화면 부품을 씀
둘 다 증권사 Longbridge(롱브릿지)가 만들었고, Apache-2.0이라 회사 앱에도 무료로 쓸 수 있음
무거운 데스크톱 도구는 GPUI Kit, 휴대폰까지 가야 하거나 출시 뒤에 화면을 내려보내야 하면 NSH가 맞음
NSH는 10월 17일 처음 나와 아직 0.3 버전이라, 지금 제품에 쓰기엔 GPUI Kit보다 위험이 큼 (11월 4일 기준)
GPUI Kit이란, gpui-component가 바뀐 이름
gpui로 데스크톱 앱을 만들 때 필요한 부품과 기반 코드를 한 묶음으로 모은 것임.
gpui는 코드 편집기 Zed 팀이 만든 Rust UI 프레임워크로, 화면을 GPU로 직접 그림. 다만 완성된 버튼이나 입력창이 거의 없음
Longbridge가 자사 증권 앱 Longbridge Pro를 만들면서 이 빈자리를 채우려고 만든 게 gpui-component임
9월 3일 나온 0.6 버전부터 이름을 GPUI Kit으로 바꾸고 세 층으로 나눔
gpui-component: 모양까지 갖춘 완성 부품. 바로 앱을 만들 때 씀gpui-base: 모양 없이 동작만 있는 부품. 자기 디자인 시스템을 만들 때 씀gpui-shell: 출시한 앱에 자바스크립트로 기능을 덧붙일 수 있게 해 줌
앱에는
gpui-kit하나만 넣으면 버전이 맞는 gpui까지 함께 들어옴. 최신은 11월 2일 나온 0.9.0웹에 빗대면 gpui는 HTML과 Tailwind, gpui-base는 Base UI, gpui-component는 shadcn/ui에 해당한다고 공식 문서가 설명함
Native Shell(NSH)이란, 운영체제 화면 부품을 쓰는 Rust 프레임워크
휴대폰, 데스크톱, 웹에 같은 앱을 띄우되, 화면은 운영체제마다 원래 있는 부품으로 그림.
iOS는 UIKit, 안드로이드는 안드로이드 기본 뷰, macOS는 AppKit, Windows는 Win32, Linux는 GTK 4, 웹은 그냥 HTML로 그림
그래서 글자 선택, 복사 메뉴, 화면 낭독기가 운영체제 것 그대로 동작함. 같은 메뉴도 데스크톱에선 팝업, 휴대폰에선 아래에서 올라오는 시트로 뜸
앱은 Rust로 짜도 되고, 화면만 TSX로 짜도 되고, 둘을 섞어도 됨. TSX는 React에서 쓰는, 코드 안에 화면 태그를 섞어 쓰는 TypeScript 문법임
처음엔 Longbridge 휴대폰 앱에 플러그인 화면을 넣으려고 만들었음. gpui로 휴대폰 화면을 그리면 글자 선택과 입력기를 전부 새로 만들어야 해서 운영체제 부품을 쓰기로 했다고 밝힘
10월 17일 0.1, 10월 26일 0.3.0이 나옴
nsh명령어 하나로 앱 생성, 실행, 패키징을 다 함. Mac에서는brew install longbridge/tap/nsh로 설치함
어떤 앱 개발에 맞나
데스크톱에서 데이터를 잔뜩 다루면 GPUI Kit, 흔한 화면을 여러 기기에 띄우려면 NSH임.
GPUI Kit이 맞는 앱
시세 단말, 데이터베이스 클라이언트, 로그 뷰어처럼 표가 수십만 줄에 이르는 도구
코드 편집기나 변경 내용 비교 화면이 들어가는 개발 도구. 20만 줄 파일도 버틴다는 편집기가 들어 있음
패널을 끌어다 붙이는 작업 공간, 차트, 마크다운 표시가 필요한 앱
NSH가 맞는 앱
채팅, 메일, 설정, 입력 폼처럼 몇 군데만 바뀌고 나머지는 가만히 있는 화면
휴대폰과 데스크톱, 웹에서 같은 로직을 쓰고 싶은 앱
이미 있는 iOS, 안드로이드 앱에 화면 하나만 끼워 넣고 싶은 경우
둘을 함께 쓸 수도 있음. NSH에는 GPUI 백엔드가 있어서 GPUI Kit 앱 안에 NSH 화면을 띄울 수 있음
고르면 얻는 것
GPUI Kit은 검증된 부품, NSH는 기기마다 자연스러운 동작과 출시 뒤 화면 배포가 강점임.
GPUI Kit
실제 서비스 중인 증권 앱에 처음부터 써 온 부품이라 표, 편집기, 패널 배치를 바로 쓸 만함
직접 그리니 운영체제마다 화면이 똑같음. 가장 단순한 앱이 약 12MB (공식 추정치)
화면에 띄우지 않은 창에서 부품을 실제로 누르고 입력해 보는 UI 테스트 도구가 들어 있음
Claude Code, Cursor 같은 코딩 에이전트용 스킬을 공식으로 줌 (
npx skills add longbridge/gpui-kit)
NSH
글자 입력과 선택을 운영체제가 맡아서, 한글 입력기를 따로 맞춰 볼 일이 적음. Windows만 NSH가 만든 입력창에 운영체제 입력기를 붙이는 방식임
출시한 앱에 TSX 화면을 서명한 묶음으로 내려보낼 수 있음. 앱은 서명을 확인한 뒤, 허락한 네트워크 주소와 기능만 쓸 수 있는 격리 공간에서 돌림
그래서 AI가 만든 예약 카드나 입력 폼을 앱 안에 바로 띄우기 좋음. 공식 문서도 이 쓰임을 주요 용도로 꼽음
Rust로만 짠 앱에는 자바스크립트 엔진이 아예 들어가지 않음
고르면 포기하는 것
GPUI Kit은 휴대폰을, NSH는 안정성과 쉴 새 없이 바뀌는 화면의 성능을 내줘야 함.
GPUI Kit
사실상 데스크톱 전용임. iOS는 실험 단계이고, 웹(WebAssembly)은 예제는 돌아가지만 실제 배포 방법으로는 아직 검증하지 않았다고 스스로 밝힘
화면까지 전부 Rust 코드로 짜야 함. 끌어다 놓으며 화면을 만드는 편집기가 없음
아직 1.0 전이라 버전이 오를 때 기존 코드가 깨지는 변경이 자주 나옴. 0.9.0에서도 테마 값을 직접 채우던 코드가 컴파일되지 않게 바뀜
한글 입력과 화면 낭독기 지원은 gpui가 직접 구현한 것이라, 대상 운영체제마다 확인해 봐야 함. Linux는 Vulkan 드라이버가 꼭 있어야 함
NSH
나온 지 3주가 안 됨. 0.2에서 API 이름을 통째로 바꿨고 0.3에서 import 경로를 바꿔, 버전마다 기존 앱을 고쳐야 했음. 아직 호환을 보장하는 버전이 아니라고 직접 밝힘
운영체제 부품으로 그리니 플랫폼마다 화면이 조금씩 다름. 픽셀까지 똑같아야 하면 Flutter처럼 직접 그리는 쪽이 낫다고 공식 문서도 안내함
기본 부품(
nsh/base)은 동작만 있고 모양이 없음. Tailwind 클래스와 테마로 앱이 직접 꾸며야 함TSX는 QuickJS라는 가벼운 자바스크립트 해석기로 돌아서 무거운 계산엔 느림. 그런 계산은 Rust 모듈로 빼야 함
npm 패키지는 화면(DOM)을 건드리지 않는 것만 쓸 수 있어, React 부품 라이브러리는 못 씀. 패키지가 많이 필요하면 React Native, Flutter, Qt가 낫다고 공식 문서가 안내함
화면 전체가 쉬지 않고 바뀌는 시세 단말에는 무거움. NSH 문서도 이런 앱엔 GPUI 쪽을 권함
500줄 시세 표 CPU 사용량(Longbridge 측정): 초당 1,000건 갱신은 NSH 18%, GPUI Fast 20%로 비슷함
초당 20,000건이면 NSH 73~78%, GPUI Fast 25%로 세 배 가까이 벌어짐. GPUI Fast는 Longbridge가 gpui를 고쳐 만든 빠른 버전으로, GPUI Kit에서 골라 쓸 수 있음
자주 묻는 질문
gpuikit과 gpui-kit은 같은 건가?
다름.
gpuikit은 개인 개발자 Nate Butler가 만든 부품 라이브러리이고,gpui-kit이 Longbridge의 GPUI Kit임. 공교롭게 둘 다 지금 0.9 버전임
crates.io의 nsh가 이 NSH인가?
아님. crates.io의
nsh는 2018년에 나온 다른 명령줄 셸임. Native Shell은nsh.dev의 설치 스크립트나 Homebrew로 받음
지원하는 운영체제 버전은?
NSH: iOS 15, 안드로이드 9, macOS 14, Windows 10 1809, GTK 4.14 이상
GPUI Kit: macOS 12, Windows 10 이상. Linux는 Vulkan이 필요함
일렉트론이나 타우리 대신 쓸 수 있나?
데스크톱에선 둘 다 브라우저 없이 돌아가서 가벼움. 대신 웹에서 쓰던 React 부품은 가져다 쓸 수 없음. 자세한 비교는 gpui 글에 정리함