1P by GN⁺ | ★ favorite | 댓글 1개
  • Servo 2024년 8월 업데이트는 웹 엔진 기능부터 servoshell 브라우저, Windows 품질, 개발 도구, CI 안정성까지 폭넓게 다룸
  • Nightly 빌드에는 HTMLDialogElement.show(), <textarea> 입력 렌더링, border-image, structuredClone(), crypto.randomUUID(), WAV 재생, Web Audio IIRFilterNode, cross-origin redirect 탐색 등이 추가됨
  • 핵심 구성 요소는 SpiderMonkey 128, WebRender 0.65, wgpu 22.0, Rust 1.80.1로 올라갔고 WebXR와 flexbox가 기본 활성화됨
  • servoshell은 탭 브라우징과 새 툴바·새 탭 페이지를 얻었으며, Windows에서는 키보드 탐색, PNG 출력, 폰트·GPU 관련 문제가 개선됨
  • 새 CI 러너로 Windows 전용 빌드 시간이 70% 단축됐고, 실제 웹사이트에서 발생하던 여러 크래시와 SpiderMonkey GC 관련 BorrowError도 수정됨

웹 플랫폼 기능 추가

  • Servo nightly 빌드에 여러 웹 API와 CSS 기능이 순차적으로 들어감
    • 2024-07-27: HTMLDialogElementshow() 기본 지원
    • 2024-07-29: HTMLFieldSetElementtype 속성
    • 2024-07-31: <textarea>에 입력한 텍스트 렌더링
    • 2024-07-31: CSS border-image 속성
    • 2024-08-02: CSP source인 unsafe-eval, wasm-unsafe-eval
    • 2024-08-04: WAV 오디오 파일 재생
    • 2024-08-09: structuredClone() API
    • 2024-08-12: Web Audio의 IIRFilterNode
    • 2024-08-13: cross-origin redirect 탐색
    • 2024-08-23: crypto.randomUUID() API
    • 2024-08-29: CSS clip-path 속성
      • path(), polygon(), shape(), url() 값은 제외됨

엔진 구성 요소와 기본 동작 변경

  • Servo는 주요 의존 구성 요소를 최신 버전으로 올림
    • SpiderMonkey 128

    • WebRender 0.65

    • wgpu 22.0

      • Rust 1.80.1
      • WebXRflexbox가 기본 활성화됨
      • Promise를 반환하는 웹 API는 실패 시 예외를 던지는 대신 Promise를 올바르게 reject함

WebXR와 flexbox 개선

  • WebXR API는 기본 활성화에 맞춰 여러 인터페이스와 입력 기능이 개편됨
    • Gamepad 지원이 추가됨
    • hand input, XRBoundedReferenceSpace, XRFrame, XRInputSource, XRPose, XRSession, XRTargetRayMode, XRView, XRWebGLLayer 관련 업데이트가 들어감
    • makeXRCompatible()은 이제 WebGLRenderingContext뿐 아니라 WebGL2RenderingContext 에서도 호출 가능함
  • flexbox에는 자주 쓰이는 레이아웃 기능이 보강됨
    • gap 속성
    • align-content: stretch
    • align-items, align-selfstart, end
    • flex-direction: column, column-reverse 기본 지원
  • flex item의 배치와 크기 계산도 더 정확해짐
    • flex item에서 position: relative가 지원됨
    • flex item의 z-index는 항상 stacking context를 생성함
    • flex item과 flex container에 올바른 intrinsic size가 적용됨
  • 양방향 텍스트 지원 작업이 진행 중임
    • fragment tree 아키텍처 변경과 writing-mode 인터페이스 작업이 포함됨
    • unicode-bidi 속성과 dir 속성은 부분 지원됨
    • dir=auto 값은 아직 지원되지 않음

servoshell 브라우저와 Windows 품질

  • Servo-the-browser새 툴바탭 브라우징이 추가됨
  • 새 탭 페이지는 Servo 임베더가 custom protocol handler를 등록할 수 있는 새 API를 사용함
  • Windows 실행 품질도 여러 영역에서 개선됨
    • 키보드 탐색이 수정됨
    • --output의 PNG 출력 동작이 수정됨
    • 폰트와 GPU 관련 버그가 고쳐짐
  • Windows 관련 수정은 servo.org와 duckduckgo.com에서 글리프가 잘못 정렬되고 색상이 틀리던 문제, wikipedia.org에서 이미지가 깨지던 문제와 연결됨

개발 도구와 개발자 워크플로

  • devtools 지원은 인턴십 프로젝트의 마지막 달 작업 이후 기능이 늘어남
    • Servo가 HTML tree를 지원함
    • StylesComputed 패널을 지원함
  • macOS에서는 빌드 직후 servoshell 실행 과정이 몇 초 더 빨라짐
  • CI에는 기존 tidy check와 별도로 전용 linting job에서 clippy가 실행됨
  • 기부금으로 Windows 빌드용 새 CI 러너가 추가됐고, Windows-only build time이 70% 줄어듦
  • Linux 빌드용 새 러너도 곧 추가될 예정이며, WPT try build가 더 빨라질 예정임
  • GitHub issue 조사를 위한 triage meeting이 진행 중이며, 다음 Servo issue triage meeting은 9월 2일 10:00 UTC에 열림

엔진 안정성 개선

  • 8월에는 실제 웹사이트에서 발생하던 크래시 버그가 다수 수정됨
  • 주요 수정 사례는 렌더링, reflow, HTML parser 동작에 걸쳐 있음
    • HTML spec에서 table 근처 float 렌더링 중 발생하던 크래시
    • w3schools.com에서 불필요한 명시적 reflow 때문에 발생하던 크래시
    • HTML parser를 re-entrant하게 만들어 kilonova.ro, tweakers.net 등 여러 사이트의 크래시 수정
  • 그 밖에도 플랫폼·API·파싱 경로에서 발생하던 크래시가 줄어듦
    • macOS에서 WebGL 사용 중 창 크기 변경 시 크래시
    • 매우 긴 grapheme cluster 텍스트 렌더링 중 크래시
    • 특정 폰트의 tab 문자 렌더링 중 크래시
    • window.stop() 호출 이후 parser 크래시
    • 일부 값을 console.log()에 전달할 때 크래시
    • 일부 <img srcset> 값 파싱 중 크래시
    • 일부 HTTP header 값 파싱 중 크래시
    • 특정 상황에서 window.opener 설정 시 크래시
    • 문서에서 iframe 제거 시 크래시
    • 지원되지 않는 옵션으로 new AudioContext() 호출 시 크래시
    • Servo 종료 시 WRSceneBuilder에서 간헐적으로 발생하던 크래시
  • SpiderMonkey GC에서 발생하던 여러 BorrowError 크래시가 수정됨
  • 이 종류의 버그를 정적 분석으로 막기 위한 작업이 진행 중임
  • 탐색 시 DOM Window 객체가 더 이상 leak되지 않음
  • Unix에서 servoshell은 panic 시 비정상 종료되며, web test가 결과를 “CRASH”로 올바르게 기록할 수 있음

기부 현황

  • Servo는 반복 기부로 현재 월 3,077달러를 받고 있으며, 7월 대비 4.1% 증가함
  • LFX를 통한 12명의 기부가 포함돼 있지만, Servo는 곧 LFX 기부 수락을 중단할 예정임
  • 반복 기부는 GitHub Sponsors 또는 Open Collective로 옮겨야 함
  • Servo는 thanks.dev에도 등록돼 있으며, Servo에 의존하는 GitHub 조직 3곳이 이미 후원 중임
  • url, html5ever, selectors, cssparser 같은 Servo 라이브러리를 사용하는 경우 thanks.dev를 통해 커뮤니티에 기여할 수 있음
  • 기금 사용은 Technical Steering Committee에서 투명하게 결정되며, 자세한 내용은 Sponsorship page에 있음

댓글과 토론

Hacker News 의견들
  • 받는 후원 규모가 너무 작아서 놀라움. 대형 조직을 제외한 제3자 개인 후원만 집계한 건지 궁금함
    웹 브라우저가 chrom(ium)e를 통해 Google에 장악됐다고 목소리를 높이는 사람이 많은 걸 보면, 더 많은 개인이나 회사가 경쟁자가 더 빨리 나오도록 관심을 가질 줄 알았음

    • 아마 공유지의 비극 같은 게 있어서, 아무도 자기가 이런 일을 후원해야 한다고 생각하지 않는 듯함
      처음부터 새 엔진으로 완전히 새 브라우저를 만드는 건 현실적이지 않다는 인식도 있어서, 굳이 왜 후원하냐는 분위기가 있었을 것 같음. 다행히 Ladybird가 이 부분을 바꿨을지도 모름
    • 목소리를 크게 내는 사람들 중 상당수는 큰돈을 가진 사람들이 아니라고 봄. 그런 돈을 가진 조직도 아닐 수 있음
      그리고 그런 돈이 있는 조직 중 일부는 이미 포기했음. 몇 년 전 Edge를 Chromium으로 바꾼 Microsoft가 그렇다. 또 많은 사람은 Chromium의 확립된 대안인 Firefox에 기부하는 쪽을 더 선호할 것 같지만, 실제로 Firefox 개발에 특정해서 기부하기는 꽤 어렵기도 함
    • 빈 수레가 요란한 법임. 어떤 주제에 대해 목소리를 내는 건 싸지만, 그 대의를 위해 시간이나 돈을 내는 건 그렇지 않음
    • 좀 슬픔. HN만 해도 한 달에 5달러씩 기부하면 아마 목표액에 도달할 수 있을 텐데
      여기 있는 대부분은 웹의 끔찍한 상태를 불평만 하고 실제로는 아무것도 안 하는 것처럼 보임
  • 다들 강한 숫자를 보여주자
    HN 커뮤니티라면 하루 안에 10만 달러를 쉽게 넘길 수 있음. 진짜로 기대할 만한 새 브라우저가 나왔으니 해내자

    • 꼭 지지와 기부로 보여주면 좋겠음. HN의 활성 사용자 전원이 10달러씩만 기부해도 엄청난 규모가 됨
  • Servo가 계속 살아 있는 것을 보니 흥미로움. 응원함

    • 동의함. 다른 브라우저와 엔진의 진짜 대안이 되려면 아직 갈 길이 멂
      그래도 대안 브라우저와 엔진을 개발하려는 진지한 노력이 있다는 건 좋다고 봄. Ladybird 브라우저는 성숙한 제품까지 훨씬 더 멀지만, 존재 자체가 반가운 프로젝트이기도 함
    • 응원만 말고 기부도 하자 :)
  • 최신 변경 사항을 받아서 새 탭을 보다가 RTL 지원이 생긴 걸 보고 놀랐음. 몇 주 전에는 지원되지 않았음
    병합된 PR이 여기 있음: https://github.com/servo/servo/pull/33148

  • Servo는 버려진 거 아니었나?

    • Mozilla가 버렸지만, Wikipedia에 따르면 Linux Foundation이 넘겨받았음