Servo 5월 업데이트: 사용자 스크립트, mp4 호환성, DevTools 블랙박싱 등
요약
Servo 0.3.0 릴리스를 통해 웹 플랫폼 호환성, 성능, 보안이 대폭 개선되었습니다. CSS 글꼴 기능, MP4 재생 지원, DOM API 확장이 포함되었으며 SpiderMonkey 업데이트를 통해 보안 안정성을 강화했습니다.
핵심 포인트
- CSS 글꼴 및 미디어(MP4) 호환성 확대
- SpiderMonkey 업데이트를 통한 메모리 안전성 및 보안 강화
- 사용자 스크립트 및 DevTools 블랙박싱 기능 지원
- 레이아웃 순회 축소 및 스레드 풀 통합을 통한 성능 개선
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 에 추적됨
댓글과 토론
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기