본문으로 건너뛰기
피드

wgsl-rs: Rust 코드를 GPU 셰이더(WGSL)로 동시에 돌리는 매크로 크레이트

open-source 약 5분

Rust-GPU의 복잡한 프로비저닝과 nightly 종속 문제를 해결하기 위해, #[wgsl] 매크로로 Rust 코드를 CPU와 WGSL 양쪽에서 동시에 실행할 수 있는 크레이트를 만들었음. stable Rust에서 동작하고 셰이더를 cargo test로 유닛 테스트할 수 있음.

  • 1

    Rust-GPU의 한계(nightly 종속, 이중 컴파일, spirv-std 2년간 미업데이트)를 대체

  • 2

    stable Rust에서 동작, cargo add로 설치 끝

  • 3

    같은 Rust 코드가 CPU에서는 네이티브, GPU에서는 WGSL로 실행

  • 4

    생성 WGSL이 human-readable하고 naga로 컴파일 타임 검증

  • 5

    트레이드오프: 제네릭/트레이트 없음, WGSL(WebGPU) 한정

Rust-GPU의 한계, 그리고 wgsl-rs의 등장

  • Renderling이라는 실시간 3D 렌더러를 만드는 개발자가 Rust-GPU를 쓰다가 한계를 느끼고 직접 wgsl-rs라는 크레이트를 만들었음. 핵심은 Rust 코드에 #[wgsl] 매크로를 붙이면 같은 코드가 CPU에서는 Rust로, GPU에서는 WGSL로 동시에 돌아가는 것

  • Rust-GPU의 장점은 확실함 — 모듈 시스템, 타입 체킹, 제네릭, 에디터 툴링 등 Rust의 모든 이점을 셰이더에서 쓸 수 있음. 근데 현실적인 고통이 만만치 않음:

    • 커스텀 컴파일러 백엔드 프로비저닝이 번거로움
    • 특정 nightly Rust 컴파일러에 종속
    • spirv-std가 2년 넘게 업데이트 안 됨
    • CPU 코드와 GPU 코드(SPIR-V)의 이중 컴파일 + 링킹 필요
    • while 루프, for 루프, transmute 등 안 되는 것들을 부딪혀봐야 알게 됨
  • 게다가 Rust-GPU 나머지 메인테이너들이 "Vectorware"라는 AI/범용 컴퓨팅 스타트업을 차리면서 커뮤니케이션이 뜸해짐. 작가는 그래픽/사운드/게임 쪽이라 방향이 갈린 거임

wgsl-rs가 주는 것

  • stable Rust에서 동작. nightly 필요 없음. cargo add wgsl-rs 하면 끝
  • 컴파일 타겟이 하나. SPIR-V 바이너리 만들고 다시 링크하는 과정 없이, proc macro가 컴파일 타임에 WGSL 문자열을 생성
  • 생성된 WGSL이 사람이 읽을 수 있는 수준. Rust 코드와 거의 1:1 대응되어서 GPU 디버깅 시 추론이 가능
  • 셰이더를 cargo test로 유닛 테스트 가능. CPU에서 같은 로직이 그대로 돌아가니까 물리 연산, 컬링 같은 건 프로덕션에서도 CPU 버전을 쓸 수 있음
  • linkage-wgpu 피처를 켜면 wgpu 보일러플레이트(버퍼 디스크립터, 바인드 그룹 레이아웃, 셰이더 모듈 생성 등)까지 자동 생성

💡

> standalone 모듈은 컴파일 타임에 naga로 WGSL 검증까지 해주고, 에러를 Rust 소스 스팬에 매핑해줌. 다른 #[wgsl] 모듈을 import하는 경우에는 cargo test로 검증

트레이드오프

  • WGSL만 지원. Rust-GPU는 SPIR-V → Vulkan/OpenGL/Metal 다 되지만, wgsl-rs는 WebGPU(wgpu) 한정

  • 더 엄격한 Rust 서브셋: 트레이트 없음, 제네릭 없음, 클로저/이터레이터 없음. 제네릭 없는 게 특히 고통스럽다고 직접 언급

  • 바인드리스 리소스, 메시 셰이더, 레이트레이싱 같은 최신 GPU 기능은 WGSL 스펙 범위 밖이라 불가

  • 저자의 포인트: wgsl-rs와 Rust-GPU는 양자택일이 아님. wgsl-rs로 빠르게 시작하고, 벽에 부딪히면 Rust-GPU로 넘어가면 됨. 2026년 로드맵은 crates.io 베타 릴리스 → GPU 슬랩 할당(crabslab/craballoc) → GPU 가속 ECS(podecs) → Renderling 내부 재작성 → GPU 레이트레이서 순서

Rust-GPU 대비 80/20 파레토 접근. 제네릭 없는 게 고통스럽지만 프로비저닝 고통이 0인 건 실질적 생산성 향상.

댓글

댓글

댓글을 불러오는 중...

open-source

뱀부랩, 오픈소스 슬라이서 개발자에게 법적 압박 걸었다가 역풍 맞음

3D 프린터 제조사 뱀부랩이 OrcaSlicer-BambuLab 개발자에게 중단 요구서를 보내면서 오픈소스와 수리권 커뮤니티의 반발을 샀다. GamersNexus와 Louis Rossmann은 개발자의 허락을 받아 소프트웨어를 다시 호스팅하고, 소송이 걸리면 각각 1만 달러씩 법률 지원을 하겠다고 나섰다.

open-source

OrcaSlicer 포크, Bambu Lab 프린터의 인터넷 연결 기능 되살림

FULU Foundation의 OrcaSlicer-bambulab 포크가 Bambu Lab 프린터에서 LAN 전용 제한 없이 BambuNetwork 기반 인터넷 연결을 다시 지원한다고 밝힘. Windows에서는 WSL 2 설정이 필요하고, Linux에서는 일반 설치만으로 충분하다고 안내함.

open-source

코넬대가 공개한 정확히 2,000줄짜리 교육용 운영체제

코넬대 기반 프로젝트인 egos-2000은 학생이 교육용 운영체제 전체 코드를 직접 읽을 수 있게 만드는 걸 목표로 한다. C, 헤더, 어셈블리, make 파일을 합쳐 정확히 2,000줄이며, QEMU와 RISC-V 보드에서 동작하고 9개 코스 프로젝트가 붙어 있다. 운영체제 수업에서 ‘작지만 전체 구조가 보이는 코드베이스’가 필요했던 사람에게 꽤 반가운 자료다.

open-source

이맥스가 Git 대신 Bazaar를 붙잡았던 6년짜리 오픈소스 드라마

이맥스는 2008년 CVS에서 벗어나면서 Git 대신 GNU 프로젝트인 Bazaar를 선택했고, 이 결정은 성능 벤치마크와 개발자 반발을 압도한 정치적 판단에 가까웠다. Bazaar는 느리고 유지보수도 흔들렸지만, GNU 패키지는 GNU 도구를 써야 한다는 원칙 때문에 전환은 2014년까지 미뤄졌다. 결국 ELPA 브랜치 문제와 Bazaar 개발 중단, 변환 스크립트 준비 끝에 이맥스는 Git으로 옮겨갔다.

open-source

현대차·기아, 오픈소스 특허 방어망 넓혀 소프트웨어 중심 차량 전환 준비

현대차·기아가 오픈소스 소프트웨어 특허 분쟁을 줄이기 위해 글로벌 특허 네트워크 OIN 2.0에 가입했다. 소프트웨어 중심 차량, 클라우드, 커넥티드 서비스처럼 오픈소스 의존도가 큰 영역에서 법적 리스크를 미리 관리하려는 움직임이다.