Electron 없이 Chromium 엔진을 라이브러리로 링크하는 Zebkit
Zebkit – Chromium's engine as a library you link, not a runtime you live in

Zebkit은 Blink, V8, PDFium, FFmpeg 등 Chromium의 엔진을 하나의 라이브러리로 애플리케이션에 링크하는 프로젝트다. Electron처럼 런타임 위에 앱을 올리는 대신, C/C++/Rust/Python/JavaScript 앱이 자체 이벤트 루프와 창을 유지하면서 필요할 때 웹 뷰, PDF, 미디어, 자동화 기능을 호출한다. 최신 Electron 대비 34% 작은 크기, 2.3초 콜드 스타트, 29% 적은 메모리를 내세우며 Node 없이 동작한다.
Electron은 기반이다. 애플리케이션은 그 안에서, 그 런타임과 창, 패키징 위에 만들어진다. zebkit은 부품이다. 애플리케이션은 SQLite를 추가하듯 zebkit을 추가하고, 자신의 프로세스와 툴킷, 배포 방식을 그대로 유지한다.
HN 토론
42- torginus
이건 CEF(Chromium Embedded Framework)와 어떻게 다른가요?
CEF도 상당히 축소된 버전의 Chrome 엔진으로, 게임의 인게임 로비나 OBS의 웹 오버레이 등 수많은 프로젝트에서 임베딩용으로 사용됩니다.
개인적으로 CEF의 문제점은 Chrome을 꽤나 기본 상태 그대로 유지한다는 점입니다. 사용자 앱에 포함하고 싶지 않은 것들이 많이 들어 있죠.
하지만 그렇게 한 데에는 이유가 있습니다. 만약 정말로 Chrome 코드베이스를 도끼로 찍어내듯 잘라냈다면, 기본적으로 새로운 버전을 업스트림할 능력을 잃게 되었을 테니까요.
반면 Zebkit은 더 세밀한 수준이 될 것 같습니다. 이 문제를 더 잘 처리하는지 지켜봐야겠지만, 광범위하게 호환되면서 훨씬 더 가벼운 브라우저 엔진에 대한 시장은 분명히 있다고 생각합니다. 예를 들어 샌드박스와 프로세스 격리를 없애는 것만 해도 엄청나지만 호환되지 않는 변경이 될 겁니다.
WebRTC나 비디오 재생, webusb 등 99%의 앱이 결국 사용하지 않을 대형 모듈을 빼는 것도 마찬가지겠죠.
- joahnn_s
이해가 안 되네요. CEF가 있는데 왜 공유 라이브러리/CFFI로 로드하나요? 그냥 앱 프로세스를 브라우저가 가질 수 있는 모든 문제, 보안 문제까지 포함해서 노출시키는 겁니다.
대부분의 언어에서 CFFI는 같은 프로세스이기 때문에 앱 전체 프로세스를 크래시시킵니다. 개인적인 용도라면 적합할 수도 있겠지만, 진지한 용도로는 아닙니다.
- saidnooneever
'zeb'은 왜? 그건 남성 성기를 가리키는 저속한 단어입니다. 거기 다른 어떤 것과도 관련이 없어 보이니 더 나은 이름을 고를 수 있었을 텐데... 어쩌면 의도적인 것일 수도 있고, 그렇다면 프로젝트의 품질에 의문이 듭니다. 다른 댓글러들도 이 점을 논쟁하는 것 같네요.
- netshade
좋네요. 저는 ZShot( https://zshot-app.com , https://zshot-cli.com )에서 CEF를 많이 사용하는데, 이런 것이 더 쉽게 통합되어야 한다는 점에 강하게 동의합니다.
또한 PDFium이나 FFmpeg 같은 라이브러리를 소비자에게 노출하는 것에도 매우 동의합니다. 배포 부담을 상당히 줄여주고 많은 것을 가능하게 하죠.
이 길을 가는 분들께 곁들여 한마디: 실제로 Chromium(특히 FFmpeg)과 함께 배포하는 것은 복잡해질 수 있습니다. Mac OS에서 배포한다면 메인 프로세스와 함께 모든 헬퍼의 공증(notarization)을 걱정해야 합니다(Zebkit도 여전히 헬퍼 프로세스로 실행된다고 가정합니다). FFmpeg 라이브러리에 링크하는 경우에도 마찬가지입니다. 그리고 FFmpeg의 경우 라이선스 준수가 실제로 배포하려는 것과 일치하는지 확인하는 것이 중요합니다. FFmpeg는 GPL과 LGPL 모드가 있으니 올바른 것을 선택했는지 확인해야 합니다. 제 기억으로 Blink도 LGPL이므로, 거기서 요구하는 것을 충족하는지 확인하는 것이 배포에 중요한 영향을 미칩니다.
- prologic
꽤 흥미롭네요! 저는 CEF(Chromium Embedded Framework)를 사용해 GoNix(https://gonix.dev)용 웹 브라우저를 만들었는데, 꽤 잘 작동하지만 공유 메모리와 파이프가 필요합니다. Chromium을 라이브러리로 임베딩하는 것은 훨씬 더 흥미롭게 들리네요. 한번 시도해볼까 합니다! 공유해주셔서 감사합니다!