Servo 5월 업데이트: 사용자 스크립트, mp4 호환성, DevTools 블랙박싱 등
4 hours ago
4
- 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[]]> 레이아웃
- DOM API도 여러 표준 영역에서 늘어남
- onslotchange 속성이 ShadowRoot에 추가됨
- screenLeft, screenTop이 Window에 추가됨
- new Blob()에서 {endings: "native"}를 지원함
- new PerformanceMark()가 추가됨
- parseHTML()이 Document에 추가됨
- readAsBinaryString()이 FileReader에 추가됨
- performance.measure()가 redirectStart, redirectEnd, secureConnectionStart, responseEnd mark 값을 지원함
- Windows, FreeBSD, NixOS 또는 Nix 기반 환경의 빌드 문제도 수정됨
보안: SpiderMonkey 메모리 안전성 수정
진행 중인 웹 기능
- 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는 스레드 풀 설정 이름이 정리됨
- 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는 대부분 불변이 되어, 많은 접근에서 AtomicRefCell borrow의 런타임 비용이 없어짐
- containing block 계산과 stacking context tree 구축이 대부분의 경우 단일 fragment tree 순회로 합쳐짐
- scrollable overflow 계산은 lazy·incremental 방식으로 바뀌어 전체 fragment tree 순회가 사실상 제거됨
- reflow 사이에서 fragment, shaping 결과, 기타 레이아웃 결과의 캐싱이 개선됨
- incremental fragment layout의 정밀도가 높아짐
- 텍스트 shaping의 메모리 사용량이 줄어듦
- 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에 추적됨
-
Homepage
-
Tech blog
- Servo 5월 업데이트: 사용자 스크립트, mp4 호환성, DevTools 블랙박싱 등