Servo 0.4.0 릴리스 노트
Servo 0.4.0은 558개의 커밋을 포함한 주요 업데이트로, 웹 플랫폼 호환성 확대, 보안 강화, 엔진 성능 및 메모리 사용량 최적화에 중점을 두었습니다.
웹 플랫폼 및 DOM API 향상
Servo 0.4.0은 렌더링과 인터랙티브성을 개선하기 위해 CSS와 DOM API 지원을 크게 확장했습니다.
CSS 및 미디어 쿼리 지원
새로운 기능으로는 attr() 함수(실험 모드) 구현, image(<color>) 지원, 파싱 후 해결될 수 있는 calc()의 수학식 업데이트가 포함됩니다. 이번 릴리스는 다음과 같은 포괄적인 미디어 쿼리 지원을 추가합니다:
device-width및device-height(min- 및 max- 변형 포함)height및aspect-ratio(min- 및 max- 변형 포함)orientationpointer및any-pointerhover및any-hover
또한 @font-face 내에서 font-feature-settings가 이제 지원됩니다.
새로운 DOM API
애플리케이션 기능 향상을 위해 여러 핵심 DOM API가 도입되었습니다:
- Concurrency:
SharedWorker구현. - Developer Tools:
console.dir()추가. - Custom Elements:
Document와ShadowRoot에customElementRegistry제공,initialize()및new CustomElementRegistry()인스턴스화 가능. - Streaming:
Request,Response,Blob에textStream()제공. - Pointer Events:
Element에setPointerCapture(),releasePointerCapture(),hasPointerCapture()추가. - Touch Events:
Element에ontouchstart,ontouchend,ontouchmove,ontouchcancel추가. - Cryptography: KT128/KT256용
crypto.subtle.digest()와 ML-KEM/ML-DSA용crypto.subtle.getPublicKey()지원.
실제 환경 호환성 및 렌더링
가변 글꼴 처리 개선을 통해 여러 고트래픽 사이트에서 레이아웃 정확성이 향상되었습니다.
- Lichess.org: 레이아웃 정확성이 크게 개선되었습니다.
- Zulip 및 Speedtest.net: 가변 글꼴 개선으로 가독성이 향상되었습니다.
- Google Photos 및 Cash Converters: 0.4.0 버전에서 정상 작동 확인되었습니다.
- Google Maps 및 OpenStreetMap: 전반적으로 잘 렌더링되지만 일부 인터랙티브 기능에 문제가 남아 있습니다.
보안 업데이트
Servo 0.4.0은 런타임 업데이트와 구현 변경을 통해 여러 보안 취약점을 해결했습니다.
- SpiderMonkey Updates: JS 런타임이 SpiderMonkey 140.11.0 및 140.12.0으로 업데이트되어 CVE-2026-8388, CVE-2026-8391, CVE-2026-8974, CVE-2026-8975(MFSA 2026-48 및 MFSA 2026-58) 등 여러 보안 버그가 수정되었습니다.
- Cryptographic Hardening:
SubtleCrypto의 RSA 연산이 상수 시간 모듈러 지수 연산을 사용하도록 변경되었습니다. ML-DSA 연산도 Decompose 단계가 상수 시간으로 수행되어 RUSTSEC-2025-0144가 해결되었습니다. - XSS Fix:
file:///디렉터리 목록에서 파일 이름에</script>가 포함된 경우 발생하던 HTML 인젝션 버그가 해결되었습니다.
성능 및 안정성 최적화
메모리 및 전력 효율성
- Memory Footprint:
BoxFragment가 17% 작아져(amd64에서 288바이트에서 240바이트로)ShapeCacheEntry도 크기가 감소했습니다. - Power Consumption: 2D 캔버스가 최대 23% 적은 전력을 사용합니다.
- Resource Management: 이미지 디코딩 및 이미지 캐시 채우기가 비동기적으로 수행되어 스크립트 스레드의 부하가 감소했습니다.
엔진 안정성
- Fuzzing: 6월에 퍼징 작업을 통해
<iframe>,<slot>,clip-path, DOM 트리 등 16개의 충돌 버그가 수정되었습니다. - Memory Leaks: 페이지 재로드와 2D 캔버스와 관련된 메모리 누수가 해결되었습니다.
기술 아키텍처 및 향후 작업
가비지 컬렉션(GC) 안전성
Servo는 Rust 타입 시스템을 활용해 GC 중 동적 빌림 실패를 방지함으로써 SpiderMonkey과의 통합을 보다 안전하게 전환하고 있습니다. NoGC 마커 값과 safe_borrow_mut() 메서드 도입으로 특정 연산 중 GC가 발생하지 않음을 증명할 수 있게 되었으며, 이는 불필요한 JavaScript 객체 루팅을 피함으로써 성능 최적화에도 기여합니다. 이 결과 레이아웃 과정과 HTMLCollection에서 >1%의 오버헤드 감소를 달성했습니다.
임베딩 및 API 진행 상황
- C API Wrapper: 안정적인 Rust ABI 부재 문제를 해결하기 위해 Servo는 래퍼 C API 설계를 시작했습니다. 이를 통해 안정적인 C ABI를 통해 사전 빌드된 공유 라이브러리로 Servo를 사용할 수 있게 되며, 필요에 따라 Rust 래퍼를 추가해 사용성을 높일 수 있습니다.
- WebGPU:
copyExternalImageToTexture(),createQuerySet(),resolveQuerySet()구현과 보안 컨텍스트 강제 적용이 개선되었습니다. - Text Selection: 가시적이고 인터랙티브한 텍스트 선택 구현 작업이 시작되었습니다.
사용자 및 개발자 경험
Servoshell 업데이트
- Android: 이제 Android 13+가 필요하며 Compose UI와 Kotlin을 사용하도록 현대화되었습니다.
- Desktop: 파일 드래그‑앤‑드롭 열기, 가로 탭 바 스크롤, 다중 모니터에서의 전체 화면 동작 개선이 추가되었습니다.
- General:
localhost:<port>가 위치 표시줄과 명령줄에서 자동으로http://로 인식됩니다.
DevTools 개선
Firefox DevTools를 사용할 때 Servo는 이제 Console 탭에서 잡히지 않은 예외를 올바르게 보고하고, Console 및 Debugger 탭에서 중첩 배열과 Map 객체를 검사할 수 있습니다. Scopes 패널은 전역 스코프, this 값, 그리고 (uninitialized) 변수들을 표시합니다.