본문으로 이동geul.io

gpui란? Zed가 만든 Rust UI 프레임워크, 일렉트론과 타우리 대신 쓸 만한가

올린이 geul날짜 조회 116
  • gpui는 코드 편집기 Zed를 만든 팀이 직접 쓰려고 만든 Rust용 UI 프레임워크임. HTML과 CSS 없이 화면을 GPU로 바로 그림

  • Apache-2.0 라이선스라 회사 앱에도 무료로 쓸 수 있음

  • 일렉트론보다 가볍고, 타우리와 달리 운영체제마다 화면이 똑같음. 대신 화면까지 전부 Rust로 짜야 함

  • macOS 12, Windows 10(1903) 이상에서 돌아감. Linux는 Vulkan 1.3 드라이버가 있어야 해서 오래된 그래픽카드에서는 안 켜질 수 있음

  • 버튼, 표 같은 부품은 gpuikit이나 GPUI Kit(gpui-component) 같은 라이브러리를 얹어서 씀

gpui란, Zed가 직접 만든 이유

브라우저 기반 편집기로는 화면이 자꾸 끊겨서, 게임처럼 GPU로 그리는 UI를 새로 만들었음.

  • Zed 팀은 일렉트론 기반 편집기 Atom을 만들던 사람들임. 메모리 정리나 화면 재배치 때문에 프레임이 빠지는 문제를 계속 겪었음

  • 그래서 게임처럼 화면을 GPU로 직접 그리는 방식을 골랐음. 목표는 120fps, 한 프레임에 8.33ms 안에 그리기

  • 그리는 재료는 사각형, 그림자, 글자, 아이콘, 이미지 다섯 가지뿐이고, 재료마다 전용 셰이더가 있음

  • 글자 모양은 운영체제가 만들어서 다른 앱과 똑같이 보임. 한 번 그린 글자는 GPU 메모리에 모아 두고 다시 씀

  • 그리는 엔진은 Mac이 Metal, Windows가 DirectX, Linux가 wgpu(2026년 2월에 바꿈)임

일렉트론, 타우리와 차이

가장 큰 차이는 브라우저를 아예 쓰지 않는다는 점임.

  • 일렉트론: Chromium 브라우저를 앱에 통째로 넣음. 앱이 무겁고 메모리를 많이 쓰지만, 웹 개발자가 바로 만들 수 있음

  • 타우리: 운영체제에 들어 있는 웹뷰를 씀. 가볍지만 Mac(WebKit)과 Windows(WebView2)에서 화면과 동작이 조금씩 다름

  • gpui: Rust 실행 파일 하나로 끝남. 모든 운영체제에서 직접 그려서 화면이 똑같음

  • 대신 npm, React 같은 웹 생태계를 쓸 수 없고, 화면과 로직을 모두 Rust로 짜야 함

  • 실제로 보안 회사 Fluid Attacks는 타우리로 만들어 쓰던 사내 도구를 gpui로 옮겼음. Rust와 자바스크립트를 잇는 다리가 필요 없다는 점을 이유로 들었음

CSS 최적화 걱정은 줄어드나

줄어듦. 웹에서 네이티브처럼 보이게 하려고 쓰던 요령 대부분이 필요 없음.

  • CSS 우선순위 충돌, 화면 재배치(리플로우), will-change 같은 레이어 요령을 신경 쓸 일이 없음

  • 배치는 Tailwind와 비슷하게 코드로 적음. 예: div().flex().gap_2().bg(rgb(0x505050))

  • 상태가 바뀌면 창을 GPU로 다시 그리는 구조라, 애니메이션 끊김을 따로 잡는 일이 적음

  • 그래도 남는 숙제는 있음

    • 긴 목록은 보이는 줄만 그리는 가상 목록(uniform_list)을 써야 함

    • 화면을 그리는 함수 안에서 무거운 계산을 하면 그대로 끊김

  • 대신 Rust 소유권 규칙과 gpui만의 개념(상태를 담는 Entity, 화면을 그리는 View)을 새로 익혀야 함

gpui 사용법, gpuikit과 GPUI Kit으로 시작하기

Rust를 깔고 Cargo.toml에 gpui와 부품 라이브러리를 넣으면 시작할 수 있음.

  • Rust를 설치함. Mac은 Xcode도 있어야 함

  • 공식 gpui 크레이트는 2025년 10월 0.2.2에서 멈춰 있음. 그래서 Zed 릴리스를 자동으로 따라가는 비공식판 gpui-unofficial을 많이 씀 (10월 23일 1.25.3)

  • gpuikit을 쓰면 아래 세 줄을 넣고, 앱을 띄울 때 gpuikit::init(cx)를 부름

gpui = { package = "gpui-unofficial", version = "1.14" }
gpui_platform = { package = "gpui-platform-gpui-unofficial", version = "1.14", features = ["font-kit"] }
gpuikit = "0.9"
  • gpuikit 0.9는 gpui-unofficial 1.14에 맞춰져 있어서, 최신 1.25가 아니라 같은 버전을 써야 함

  • Linux에서는 gpui_platform에 wayland나 x11 기능을 켜야 창이 뜸

gpui에는 완성된 버튼이나 입력창이 거의 없어서, 부품 라이브러리를 하나 고르는 게 보통임.

  • gpuikit: Nate Butler(iamnbutler)가 만든 라이브러리. 부품 40개 넘게 있고, 코드 편집기와 스트리밍 마크다운도 옵션으로 있음 (9월 4일 0.9.0)

    • 1.0 전이라 "릴리스마다 호환이 깨지니 버전을 고정하라"고 직접 안내함

  • GPUI Kit(gpui-component): 증권사 Longbridge가 자기 앱 Longbridge Pro를 만들며 공개한 라이브러리. 부품 75개 넘게 있음

    • 수십만 줄짜리 표, 20만 줄 코드 편집기, 화면 낭독기 지원까지 갖춤

    • 다운로드는 gpui-component 약 35만 회, gpuikit 약 1,500회 (10월 26일 확인)

  • 이름이 비슷하지만 gpuikit과 GPUI Kit은 서로 다른 프로젝트임

지원 운영체제와 저사양 그래픽카드

Mac과 Windows는 웬만한 PC에서 돌아가고, Linux가 가장 까다로움. 아래는 Zed 공식 요구 사항이고, gpui 앱도 같은 엔진으로 그리니 거의 같다고 보면 됨.

  • macOS: 12 Monterey 이상, Intel과 Apple 실리콘 모두 지원

  • Windows: Windows 10 1903 이상, Windows 11 22H2 이상, 64비트만 지원

    • 그래픽카드는 DirectX 11만 되면 됨 (대략 2012년 이후 PC)

    • 가상머신에서도 느리지만 돌아감

  • Linux: Ubuntu 20.04 이상 (ARM은 22.04 이상), RHEL 8 계열은 직접 빌드해야 함

    • Vulkan 1.3 드라이버가 꼭 있어야 해서, 오래된 내장 그래픽이나 드라이버가 부실한 환경에서는 아예 안 켜질 수 있음

    • AMD 그래픽카드에서 amdvlk 드라이버를 쓰면 실행이 안 될 수 있어 vulkan-radeon을 권함

자주 묻는 질문

  • gpui는 상업용으로 무료인가?

    • 무료임. Apache-2.0이라 비공개 앱에도 쓸 수 있고, 라이선스 문구만 함께 넣으면 됨

    • 다만 Zed 저장소의 다른 코드(편집기, ui 부품 등)는 GPL, AGPL이라 가져다 쓰면 소스 공개 의무가 생김

    • gpuikit은 MIT와 Apache-2.0 중 골라 쓰고, GPUI Kit은 Apache-2.0임

  • gpui로 만든 앱에서 한글 입력이 되나?

    • Zed에서는 한글 입력이 대체로 문제없이 됨. 한자 변환 키가 완전히 동작하지 않는다는 이슈가 열려 있음 (10월 26일 확인)

  • 웹이나 모바일에서도 돌아가나?

    • 웹은 됨. WebAssembly로 브라우저에서 돌릴 수 있고, gpuikit과 GPUI Kit 모두 웹 실행을 지원함

    • iOS와 안드로이드는 지원 목록에 없음

좋아요저장

댓글