- Servo 0.3.0은 5월 병합분 391개 커밋을 담아 웹 플랫폼, 임베딩 API, 성능, 안정성, 보안 수정을 한 번에 반영한 릴리스임
- 웹 플랫폼은
font-variant-*, fast start 없는 mp4<video>재생, 폼 인코딩, DOM API 추가로 실제 사이트 호환성을 넓힘 - 보안 측면에서는 JS 런타임을 SpiderMonkey 140.10.1로 올려 메모리 안전성 버그를 수정했고, CVE-2026-7322·CVE-2026-7323·MFSA 2026-36과 연결됨
- 사용자와 개발자는 servoshell의
--host-file=,--userscripts=옵션과 Firefox DevTools Debugger의 “Ignore source” 블랙박싱을 활용할 수 있음 - 임베더는 Rust 1.88.0 이상 요구와 SiteDataManager·Preferences·DiagnosticsLogging의 breaking change를 반영해야 하며, 성능 개선은 레이아웃 순회 축소와 스레드 풀 통합에 집중됨
Servo 0.3.0에 포함된 5월 변경
- Servo 0.3.0은 5월에 병합된 변경을 담았고, 총 391개 커밋이 포함됨
- 새 웹 플랫폼 기능은 글꼴, 미디어, 폼, 레이아웃 호환성에 걸쳐 추가됨
- CSS 글꼴 기능:
font-kerning: none,font-variant-east-asian,font-variant-ligatures,font-variant-numeric,font-variant-position - 미디어와 폼: fast start 없는 mp4 파일의
<video>지원,<form enctype="multipart/form-data">,<form enctype="text/plain"> - 레이아웃:
<![CDATA[]]>레이아웃
- CSS 글꼴 기능:
- DOM API도 여러 표준 영역에서 늘어남
onslotchange속성이 ShadowRoot에 추가됨screenLeft,screenTop이 Window에 추가됨new Blob()에서{endings: "native"}를 지원함new PerformanceMark()가 추가됨parseHTML()이 Document에 추가됨readAsBinaryString()이 FileReader에 추가됨performance.measure()가redirectStart,redirectEnd,secureConnectionStart,responseEndmark 값을 지원함
- Windows, FreeBSD, NixOS 또는 Nix 기반 환경의 빌드 문제도 수정됨
보안: SpiderMonkey 메모리 안전성 수정
- Servo의 JS 런타임인 SpiderMonkey 140.10.0에는 여러 메모리 안전성 버그가 있었음
- Servo 0.3.0은 SpiderMonkey 140.10.1 업데이트로 해당 문제를 수정함
- 세부 정보는 CVE-2026-7322, CVE-2026-7323, MFSA 2026-36에서 확인할 수 있음
진행 중인 웹 기능
document.execCommand()구현은 리치 텍스트 편집 지원을 위해 계속 진행 중이며,--pref dom_exec_command_enabled아래에서 동작함- 이번 릴리스는
backColor,foreColor,createLink,unlink,superscript,subscript,removeFormat명령을 지원함 insertParagraph명령은 부분 지원됨
- 이번 릴리스는
- Sanitizer API 작업은
--pref dom_sanitizer_enabled아래에서 이어짐- servoshell의 실험 모드에서 활성화됨
Sanitizer의setComments(),setDataAttributes(),allowProcessingInstruction(),removeProcessingInstruction(),removeUnsafe()가 추가됨
- IndexedDB는
--pref dom_indexeddb_enabled아래에서 개선 중이며,IDBTransaction.abort()의 표준 적합성이 높아짐 - 위 기능들은 servoshell의 실험 모드에서 활성화됨
- 접근성 지원은 name from contents 알고리듬과 접근성 트리를 점진적으로 구축하는 변경을 포함함
- 점진적 접근성 트리 구축은 실제 웹 콘텐츠 성능에 중요함
- 워커 관련 구현도 시작됨
SharedWorker는--pref dom_sharedworker_enabled아래에서new SharedWorker()를 지원함ServiceWorker는--pref dom_serviceworker_enabled아래에서 API 일부가 추가됨
임베딩 API 변경과 마이그레이션 포인트
- Servo의 최소 지원 Rust 버전인 MSRV가 1.86.0에서 1.88.0 이상으로 올라감
- MSRV로 컴파일 테스트를 수행하지만, 대부분의 테스트는 Rust 1.95.0으로 수행됨
- SiteDataManager의 쿠키 메서드에는 breaking change가 있음
clear_cookies,clear_session_cookies,set_cookie_for_url가 추가callback인자를 받으며, 비동기 호출이 가능해짐- 동기 호출을 유지하려면
callback에None을 전달함 set_cookie_for_url_async는 제거됐고,set_cookie_for_url(Some(Box::new(callback)))형태로 대체해야 함
- Preferences API는 스레드 풀 설정 이름이 정리됨
threadpools_image_cache_workers_max,threadpools_indexeddb_workers_max,threadpools_webstorage_workers_max는 통합된thread_pool_workers_max로 대체됨threadpools_fallback_worker_num은thread_pool_fallback_workers로 이름이 바뀜threadpools_async_runtime_workers_max는thread_pool_async_runtime_workers_max로 이름이 바뀜threadpools_webrender_workers_max는thread_pool_webrender_workers_max로 이름이 바뀜
- DiagnosticsLogging API도 재작업됨
toggle_option으로 옵션을 설정하고is_enabled로 활성화 여부를 확인함- 각 옵션은 새 타입
DiagnosticsLoggingOption의 variant임 DiagnosticsLogging의 옵션별pub필드는 제거됐으며, 필드 쓰기와 읽기는 각각toggle_option,is_enabled로 바꿔야 함extend_from_string은 더 이상help옵션을 받지 않고, 해당 구현은 servoshell로 이동함
사용자·개발자 기능
- servoshell에 새 옵션 2개가 추가됨
--host-file=은 hosts file 경로를 설정하며,HOST_FILE환경 변수의 대안임--userscripts=는 모든 문서에서 실행할 사용자 스크립트 디렉터리를 지정함
- Firefox DevTools Debugger 탭에서 스크립트 블랙박싱이 가능해짐
- “Ignore source”를 클릭하면 해당 스크립트 내부에서 breakpoint가 걸리지 않음
- 디버거에서 실행을 단계적으로 진행할 때도 해당 스크립트 내부에서 멈추지 않도록 동작해야 함
- Scopes 패널의 정확도도 개선됨
- Servo 자체 개발자는 프로젝트 정책에 따라 대규모 언어 모델 또는 생성형 AI 도구의 출력을 기여에 사용할 수 없음
- 이를 강제하기 위해 AI agent를 coauthor로 포함한 기여를 거부하는 CI 검사가 추가됨
--features vello빌드 문제도 수정됨
웹 플랫폼 세부 개선
- 여러 HTML 요소의 기본 표시가 개선됨
- 대상은
<dl>,<ol>,<ul>,<table>,<thead>,<tbody>,<tfoot>,<tr>,<td>,<th>,<dir>,<menu>,<form>임
- 대상은
- CryptoKey가 직렬화 가능해져
structuredClone()과postMessage()에서 사용할 수 있음 - DOM 여러 부분의 JS 오류 메시지가 개선됨
- 표준 적합성 개선은 다음 영역을 포함함
- 폼 제출, 탭 내비게이션,
javascript:URL 내비게이션 Refresh헤더와<meta http-equiv=Refresh>line-break: anywhere,Location.assign()crypto.subtle.deriveBits(),getComputedStyle(),performance.measure()FileReader.readAsDataURL(),Blob.stream()SubtleCrypto의 ML-KEM
- 폼 제출, 탭 내비게이션,
- WebGPU 쪽에서는
GPUSupportedLimits,GPUTexture,GPUDevice.createBindGroup()및 기타 WebGPU 기능이 개선됨 - 버그 수정은
<svg>와Content-Security-Policy,:active,:hover,align-items,border-image-outset,overflow: scroll의padding,pointerup이벤트,slotchange이벤트, 동적import(),CanvasRenderingContext2D.clip()등을 포함함
성능 개선: 레이아웃 순회 축소와 지연 처리
about:memory개선을 위해 추적되지 않는 할당을 찾는 도구가 만들어짐- 이미지 캐시, 웹 스토리지, IndexedDB의 스레드 풀이 통합돼 CPU당 필요한 OS 스레드 수가 줄어듦
- 레이아웃 최적화는 fragment tree 순회와 캐싱 비용을 줄이는 데 집중됨
- fragment tree는 대부분 불변이 되어, 많은 접근에서
AtomicRefCellborrow의 런타임 비용이 없어짐 - containing block 계산과 stacking context tree 구축이 대부분의 경우 단일 fragment tree 순회로 합쳐짐
- scrollable overflow 계산은 lazy·incremental 방식으로 바뀌어 전체 fragment tree 순회가 사실상 제거됨
- reflow 사이에서 fragment, shaping 결과, 기타 레이아웃 결과의 캐싱이 개선됨
- incremental fragment layout의 정밀도가 높아짐
- 텍스트 shaping의 메모리 사용량이 줄어듦
- fragment tree는 대부분 불변이 되어, 많은 접근에서
- DOM attributes 처리도 효율화됨
- 스크립트가 속성 값을 쓸 때 다시 읽기 전까지 직렬화를 피하며, inline style의 잦은 쓰기가 최대 25% 빨라짐
- HTML 파싱 또는 내부 속성 읽기 시 스크립트가 실제로 필요로 하기 전까지
Attr노드 생성을 피해 메모리 사용과 가비지 컬렉션 가능성을 낮춤
<iframe>이 트리에 붙을 때마다 전체 DOM tree를 순회하던 동작이 제거돼, 많은<iframe>태그를 가진 문서 파싱에서 체감됨- stylesheet lock은
parking_lot::RwLock보다 효율적인 AtomicRefCell을 사용함 - OpenHarmony에서는 실제 refresh driver가 추가돼 idle CPU 사용량이 줄고, font list를 디스크에 캐시해 시작 속도가 빨라짐
- 빌드 시간 개선을 위해 거대한 script crate에서 더 많은 코드를 분리하고, 의존성 트리 크기도 줄임
안정성 수정과 타입 시스템 활용
- 여러 crash와 hang이 수정됨
content,MediaStream,Element.attributes.item(),CSSKeyframesRule.appendRule(),FocusEvent.initEvent(),Window.stop()document.execCommand("delete")--debug-mozjs빌드- DevTools에서 일시정지 중 스크립트 평가
- DevTools에서 일부 JS 값 미리보기
- layout에서 zero-width space shaping
- servoshell의 실험 모드를 런타임에 토글하는 경우
- Rust 타입 시스템을 사용해 특정 동적 borrow 실패를 불가능하게 만드는 장기 작업이 계속됨
기여자와 후원 현황
- 9명이 Servo에 첫 패치를 병합함
- AbdAlRahman Gad, Onyeka Obi, Steve Sharon Sam, avis137, Xabier Rodríguez, June, Matt Van Horn, nicole, panxt8
- 새 기여자에게 적합한 이슈 목록은 curated list로 제공됨
- 반복 후원은 월 7659달러로, 4월 대비 4.2% 증가함
- 후원금은 CI·벤치마킹 서버, Outreachy 인턴, maintainer 작업 지원에 쓰임
- thanks.dev에서는 Servo에 의존하는 35명의 GitHub 사용자가 후원 중이며, 4월보다 2명 늘어남
- 후원금 사용은 Technical Steering Committee의 공개 funding request process를 통해 결정되며, 활성 제안은 servo/project#187에 추적됨
댓글과 토론
Lobste.rs 의견들
- lobste.rs가 Servo에서 거의 완벽하게 동작해서 기쁨
눈에 띈 건 굵은 링크가 굵게 보이지 않는 것, 글꼴이 조금 어색한 것(Fira Sans처럼 느껴짐), 로그인 페이지 입력 필드가 너무 얇은 것, 이 텍스트 필드를 클릭하면 커서가 클릭한 위치와 다르게 놓이는 것 정도임
댓글에서 JavaScript 엔진이 Firefox와 같다고 했으니, 전반적으로는 기대대로 동작하는 듯함
수정: 실험적 설정을 켜니 굵은 글씨 문제가 해결됨 - Servo는 개발된 지 몇 년이나 됐고, 애초에 무슨 의미가 있는 건가?
- Servo는 Mozilla가 Rust로 새 브라우저를 만들려고 시작한 실험 프로젝트였음
주요 목표 중 하나가 Microsoft HoloLens였지만 결국 큰 프로젝트로는 중단됐고, 일부 구성요소는 Firefox에 들어갔음
예를 들어 다중 스레드 특성 때문에 C++로 작성하기 까다로웠던 CSS 엔진이 그중 하나임
이후 Igalia가 이어받아 새 관리 주체가 되었고, 프로젝트를 되살려 새로운 경쟁자로 만들려는 중임
JavaScript 엔진은 Firefox와 같음 - 프로젝트는 2012년에 시작됐지만, 아는 한 몇 년 동안 개발이 정체됐다가 최근에야 빠른 속도로 재개됨
목적은 주요 브라우저 엔진의 대안을 갖는 것이고, 특히 Chrome 엔진인 Blink에 더 많은 경쟁을 주는 데 있음 - 현재 하드웨어가 지원하는 병렬성과 동시성을 더 쉽게 활용할 수 있는 메모리 안전 언어로 브라우저 엔진을 구현하는 건, 프로젝트가 처음 시작됐을 때처럼 여전히 큰 이점임
거대 기술 기업의 영향에서 벗어난 별도 웹 플랫폼 구현을 갖는 것도 중요함
Google은 지금 너무 큰 힘을 갖고 있고, Mozilla는 수년간 최악에 가까운 모습을 보여 왔음
그래서 적어도 나는 매달 몇 달러씩 후원하고 있음
- Servo는 Mozilla가 Rust로 새 브라우저를 만들려고 시작한 실험 프로젝트였음