이 달의 Servo 업데이트: 탭 브라우징, Windows 개선, 개발 도구 등
(servo.org)- Servo 2024년 8월 업데이트는 웹 엔진 기능부터 servoshell 브라우저, Windows 품질, 개발 도구, CI 안정성까지 폭넓게 다룸
- Nightly 빌드에는
HTMLDialogElement.show(),<textarea>입력 렌더링,border-image,structuredClone(),crypto.randomUUID(), WAV 재생, Web AudioIIRFilterNode, 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:
HTMLDialogElement의show()기본 지원 - 2024-07-29:
HTMLFieldSetElement의type속성 - 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()값은 제외됨
- 2024-07-27:
엔진 구성 요소와 기본 동작 변경
- Servo는 주요 의존 구성 요소를 최신 버전으로 올림
-
SpiderMonkey 128
-
WebRender 0.65
-
wgpu 22.0
- Rust 1.80.1
- WebXR와 flexbox가 기본 활성화됨
- 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: stretchalign-items,align-self의start,end값flex-direction: column,column-reverse기본 지원
- flex item의 배치와 크기 계산도 더 정확해짐
- flex item에서
position: relative가 지원됨 - flex item의
z-index는 항상 stacking context를 생성함 - flex item과 flex container에 올바른 intrinsic size가 적용됨
- flex item에서
- 양방향 텍스트 지원 작업이 진행 중임
- fragment tree 아키텍처 변경과
writing-mode인터페이스 작업이 포함됨 unicode-bidi속성과dir속성은 부분 지원됨dir=auto값은 아직 지원되지 않음
- fragment tree 아키텍처 변경과
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를 지원함
- Styles와 Computed 패널을 지원함
- 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에 열림
- 자세한 내용은 project#99에 있음
엔진 안정성 개선
- 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이 넘겨받았음