Servo 0.4.0 릴리스 노트

Servo 0.4.0은 558개의 커밋을 포함한 주요 업데이트로, 웹 플랫폼 호환성 확대, 보안 강화, 엔진 성능 및 메모리 사용량 최적화에 중점을 두었습니다.

웹 플랫폼 및 DOM API 향상

Servo 0.4.0은 렌더링과 인터랙티브성을 개선하기 위해 CSS와 DOM API 지원을 크게 확장했습니다.

CSS 및 미디어 쿼리 지원

새로운 기능으로는 attr() 함수(실험 모드) 구현, image(<color>) 지원, 파싱 후 해결될 수 있는 calc()의 수학식 업데이트가 포함됩니다. 이번 릴리스는 다음과 같은 포괄적인 미디어 쿼리 지원을 추가합니다:

  • device-widthdevice-height(min- 및 max- 변형 포함)
  • heightaspect-ratio(min- 및 max- 변형 포함)
  • orientation
  • pointerany-pointer
  • hoverany-hover

또한 @font-face 내에서 font-feature-settings가 이제 지원됩니다.

새로운 DOM API

애플리케이션 기능 향상을 위해 여러 핵심 DOM API가 도입되었습니다:

  • Concurrency: SharedWorker 구현.
  • Developer Tools: console.dir() 추가.
  • Custom Elements: DocumentShadowRootcustomElementRegistry 제공, initialize()new CustomElementRegistry() 인스턴스화 가능.
  • Streaming: Request, Response, BlobtextStream() 제공.
  • Pointer Events: ElementsetPointerCapture(), releasePointerCapture(), hasPointerCapture() 추가.
  • Touch Events: Elementontouchstart, 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) 변수들을 표시합니다.

Sources