짧은 문자열 연결은 결과가 어차피 flat string으로 관찰될 때 rope 표현을 건너뛰며, 촘촘한 a + b 루프에서 2.13배 빨라짐(#9184)
lexical-this arrow function은 호출마다 function environment를 할당하지 않아 마이크로벤치마크에서 2.13배 개선됨(#9192)
sparse array는 hole에 대한 즉시 비용을 내지 않으며 Array(20_000_000)이 2천만 개의 가상 요소에 비례하는 작업 대신 대부분 메타데이터로 유지됨(#8847)
새 lazy JS::Substring 타입이 regexp capture와 slice, split, indexed access 같은 string builtin을 뒷받침하며 Octane regexp 벤치마크에서 1.066배 개선됨(#8863)
바이트코드 source map에서 source position이 end-to-end로 보존되어 x.com에서 약 250ms를 절약함(#9027)
zero-copy TransferArrayBuffer가 YouTube 로딩에서 약 130ms를 절약함(#9088)
cached typed-array view가 WeakHashSet에서 intrusive list로 바뀌어 pdf.js에서 Intel ISA PDF를 로딩할 때 약 250ms를 절약함(#9180)
모든 Promise가 capture하지 않는 AK::Function closure를 가진 PromiseResolvingFunction 셀 2개를 할당하던 구조에서, Kind enum으로 디스패치되는 static function으로 바뀌어 resolver별 할당이 제거됨(#9188)
non-dictionary shape의 property-table marking을 건너뛰어 maptiler.com 로딩 중 GC 시간이 1.3초 줄어듦(#9044)
packed array의 Array.prototype.indexOf fast path가 추가됨(#9123)
Array.prototype.sort가 비교마다 재트랜스코딩하지 않고 캐시된 UTF-16을 재사용함(#9036)
색상 보간이 css-color-4에 맞춰 재작성되어 u8 대신 float에서 보간하고, missing/powerless component, out-of-gamut sRGB, alpha multiplier를 일관되게 처리함(#8934)
align, bgcolor 같은 legacy presentational HTML attribute가 직접 cascaded properties를 쓰지 않고 일반 author declaration처럼 cascade를 통과해 var() 치환과 invalid-at-computed-value-time fallback이 올바르게 동작함(#9176)
channel4.com은 flex auto-margin resolution 수정으로 category text의 세로 정렬 문제가 해결됨(#9050)
Cloudflare Turnstile은 아직 통과하지 못하지만, auth-scheme handling, Array.prototype.shift() 최적화, <input> range 및 number element의 UA event handler hardening 덕분에 훨씬 빠르게 실패함(#9063)
WPT와 기타 플랫폼 변화
Web Platform Tests
WPT 점수가 2,003,537 → 2,067,263으로 올라 이번 달 63,726개 subtest 증가를 기록함
다만 WPT가 공식 ECMAScript conformance suite인 test262를 upstream으로 가져오며 JavaScript subtest 53,207개가 추가됨
Ladybird는 test262를 수년간 별도로 실행해 왔고 LibJS conformance가 좋은 상태라 이 중 52,045개, 즉 97.8% 를 통과함
63.7k 증가분 중 약 52k는 test262 import에서 왔고, 나머지 약 11.7k가 실제 새 브라우저 플랫폼 진전임
test262 import로 WPT가 JavaScript conformance를 나머지 플랫폼과 함께 측정하게 됨
텍스트, 레이아웃, 프로세스, UI
ligature가 있는 텍스트의 selection과 hit testing이 한 glyph당 한 code unit을 가정하던 구조에서 grapheme cluster를 순회하고 glyph advance를 해당 grapheme들에 나누는 방식으로 바뀜(#8829)
shadow root에 innerHTML을 설정해도 전체 document layout tree를 무효화하지 않으며, pomax.github.io/bezierinfo에서 layout-and-paint 시간이 21% 줄어듦(#9191)
popup tab을 다른 site로 탐색해도 parent의 WebContent process가 종료되지 않음(#8730)
Qt UI에서 Ctrl+Tab과 Ctrl+Shift+Tab으로 열린 탭을 순환할 수 있음(#8704)
가운데 마우스 버튼을 누른 채 드래그해 스크롤하거나, 제자리 클릭으로 autoscroll mode에 들어갈 수 있음(#8881, #8928)
주소창 입력이 URL이나 검색 질의로 sanitize될 수 없을 때 입력을 조용히 버리는 대신 적절한 error page가 표시됨(#9072)
JavaScript 없는 브라우저를 쓰고 싶다면 Dioxus가 만드는 브라우저 프로토타입도 꽤 좋아지고 있음
Rust GUI 프레임워크인 Dioxus가 네이티브 렌더러의 일부로 개발 중이며, Flutter처럼 Skia 대안을 직접 만들려는 방향이지만 Flutter web처럼 캔버스만 쓰는 대신 웹에서도 HTML/CSS 표준으로 동작함
기존 브라우저 코드인 Chromium, Gecko, WebKit에는 의존하지 않고, Servo도 쓰는 stylo와 taffy 같은 Rust 크레이트를 활용한 거의 처음부터 만든 구현에 가까움: https://github.com/DioxusLabs/blitz (/apps/browser)
브라우저 개발에서 가장 어려운 부분은 늘 인위적인 웹 호환성이었음
많은 웹사이트가 특정 브라우저 로딩을 강제로 막고 Chromium만 허용하는데, 이게 Ladybird가 마주할 현실이고 새 브라우저 경쟁을 막는 큰 요인임 DRM Widevine도 새 브라우저가 얻기 매우 어렵고, 사용자 1천만 명인 Zen Browser조차 확보에 실패함
안타깝게도 새로운 세대가 IE의 교훈을 배우지 못했고, 다른 쪽이 Chrome OS Platform의 바람을 따르지 않으면 가장 먼저 불평하는 쪽이 됨
그런 차단이 실제로 얼마나 흔한지 모르겠음
지난 20년 동안 Firefox만 써 왔지만, 호환성을 위해 Chromium으로 바꾸라고 요구하는 사이트를 한 번도 본 적 없음
이런 인위적 관문이 상호운용성에 크게 영향을 줄 정도라면 이미 장애물의 99%는 넘은 상태이고, 대부분은 User-Agent 문자열 위장으로 넘어갈 수 있음
Widevine은 진짜 관문이 맞지만, 현실적으로는 Netflix, Disney 등 일부 스트리밍 사이트의 4K 재생을 막는 정도임
Zen이 Widevine 없이도 사용자 1천만 명을 모았다는 점을 보면 아주 핵심적이라고 보기도 어려움
Ladybird는 바로 이 이유 때문에 최근 자신을 Chrome으로 보고하기 시작했음
호환성 테스트 목적이라면 User-Agent를 흉내 낼 수 있음
브라우저 자체를 제어한다면 DRM 관련 문제를 제외하고는 불가능한 게 거의 없음
꽤 쓸 만해지고 있어 보임
이런 글은 게임 에뮬레이터 업데이트를 읽을 때의 재미를 떠올리게 함
“X 버그를 고쳐서 Y가 제대로 동작하게 되었고, 그 결과 Z 게임이 실행된다” 같은 식인데, 이번에 고친 것 중 하나가 CSS Doom이라 게임 쪽과의 겹침도 어느 정도는 있음
맞는 비유임
Andreas가 브라우저를 만드는 건 에뮬레이터를 만드는 것과 같다고 여러 번 말한 걸 들었음
웹사이트마다 서로 다른 기능을 서로 다른 방식으로 쓰고, 그는 웹사이트를 ROM에 비유함
Ladybird가 정말 잘 진행되고 있음
오래된 Firefox 사용자지만, Ladybird가 아주 초기 알파에 들어가고 미리 컴파일된 빌드가 나오기 시작하면 반드시 초기에 써볼 생각임
strava.com : Login works now that Navigator.getBattery throws the spec-mandated error type instead of one of our own (#8770).
Strava가 내 배터리 잔량을 왜 원하지?
추적용 고유 지문 생성에 쓰려는 가능성이 가장 높음
배터리 API를 저전력 버전 사이트를 고르는 휴리스틱으로 쓰는 걸 수도 있음
개발도상국 대상 웹 전용 버전이 있을 수도 있고, 배터리가 낮으면 절약을 위해 위치 조회 빈도를 줄이려는 것일 수도 있음
완전 추측이지만, Strava 같은 사이트가 배터리 정보를 요청하는 게 아주 말도 안 되는 일은 아니고, 다만 전반적으로 조금 수상하긴 함
Strava는 경로 추적 서비스임
웹사이트로도 쓸 수 있다고 가정하면, 위치 조회 빈도를 조절해 정확도와 전력 소모 사이에서 절충하려는 것일 가능성이 큼
https://ladybird.org/assets/img/newsletter-apr-2026-reddit-g...
Ladybird Reddit 테스트에 Evangelion r/unixporn을 쓴 사람을 정말 존경함
Evangelion을 많이 보진 않았지만, 해설 다큐멘터리는 수없이 봤고 한동안 배경화면으로도 썼을 만큼 좋아함
핵심은 Reddit이 Ladybird에서 동작한다는 것이 엄청나다는 점임
YouTube가 되는지는 모르겠지만, 그것도 동작했으면 좋겠고 Ladybird가 정말 실사용 가능해지는 느낌임
Ladybird에 후원한 https://jakubsteplow.ski/에게도 고마움
오픈소스 프로젝트에 기부하는 사람들을 Google 광고 같은 것보다 더 나은 방식으로 적극 알리고 싶고, Jakub에게 좋은 일만 있길 바라며, 다른 사람들도 Ladybird 같은 프로젝트에 독립적으로 기부했으면 함
Human Rights Foundation의 https://hrf.org/program/ai-for-individual-rights/에도 고마움
브라우저가 거의 단일/복수 과점 상태였는데 한 사람이 여기까지 해냈다는 게 놀랍고 정말 영감을 줌
EVA는 좋아하지만 조심스럽게 추천하고 싶음
크게 두 면이 있는데, 하나는 멋진 미학을 가진 메카/외계인/괴물 SF이고, 다른 하나는 자기혐오와 외로움에 집중하는 개인 드라마임
대부분에게는 첫 번째 면이 더 매력적이겠지만, 지금까지도 남아 있는 건 후자임
보게 된다면 시청 순서를 주의해야 함
오리지널 TV 시리즈와 영화 “End of Evangelion”으로 이어지는 타임라인이 있고, 완전한 리부트로 시작했다가 어떻게든 원작의 최종 리부트/리메이크/후속작이 된 “Rebuild of Eva” 영화 시리즈가 따로 있음
https://ladybird.org/#about
“오늘 브라우저 작업을 하는 사람이 몇 명인가?”에 대한 답으로, 현재 Ladybird에는 유급 풀타임 엔지니어 8명이 있고 큰 자원봉사 기여자 커뮤니티도 있다고 되어 있음
YouTube는 Ladybird에서 동작함
대부분도 동작하지만, 속도 외에 가장 큰 문제는 많은 ‘사람인지 확인’ 검사가 Ladybird에서 제대로 작동하지 않는다는 점임