1 puan yazan GN⁺ 2 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • Ladybird, Nisan ayında 35 katkıda bulunan kişinin 333 PR’ını birleştirdi ve Human Rights Foundation’dan 50.000 dolar, Jakub Stęplowski’den ise 1.000 dolar yeni bağış aldı
  • Satır içi PDF görüntüleyici, gezinme geçmişine dayalı adres çubuğu otomatik tamamlama, GTK4/libadwaita Linux frontend’i ve about:bookmarks yönetim arayüzü eklendi; böylece gezinme özellikleri ve masaüstü arayüzü genişletildi
  • HTML ayrıştırıcısı yanıt gövdesini aşamalı olarak ayrıştırıyor ve tahmini ayrıştırıcı kaynakları önceden getiriyor; JavaScript üst düzey derlemesi de arka plan iş parçacığına taşınarak YouTube yüklenirken ana iş parçacığında yaklaşık 200 ms zaman tasarrufu sağlıyor
  • JavaScript motorunda for-in cache, O(1) register allocator, zero-copy tanımlayıcı paylaşımı, lazy JS::Substring, typed-array view cache iyileştirmeleri gibi geliştirmelerle Speedometer ve gerçek site yükleme performansı arttı
  • Cache/CacheStorage, image-set(), CSS anchor positioning, asenkron DNS, dmabuf tabanlı GPU boyama, varsayılan olarak mimalloc ve Rust zorunluluğu eklendi; WPT puanı da 2.003.537’den 2.067.263’e yükseldi

Geliştirme ölçeği ve destekler

  • Nisan ayında Ladybird, 35 katkıda bulunan kişinin 333 PR’ını birleştirdi; bunların 7’si Ladybird’e ilk kez commit yaptı
  • Yeni destekçiler arasında Human Rights Foundation, “AI for Individual Rights” programı üzerinden 50.000 dolar, Jakub Stęplowski ise 1.000 dolar bağışladı
  • Ladybird, açık web’i destekleyen şirketler ve bireylerin bağışlarıyla tamamen finanse ediliyor

Gezinme özellikleri ve frontend

  • Satır içi PDF görüntüleyici

    • PDF’ler, paketlenmiş pdf.js görüntüleyicisi aracılığıyla satır içi olarak render ediliyor (#9132)
    • pdf.js; yalnızca JavaScript, HTML ve CSS ile yazılmış bir PDF görüntüleyicisidir ve sayfa gezintisi, metin seçimi, yakınlaştırma/uzaklaştırma ve belge içinde arama sunar
    • Intel ISA Manual dosyası pdf.js ile yüklenirken typed-array view cache ve :has() geçersiz kılma alanlarında iyileştirme fırsatları ortaya çıktı
  • Gezinme geçmişi ve adres çubuğu otomatik tamamlama

    • Adres çubuğuna yazarken, gezinme geçmişine dayalı zengin öneriler gösteriliyor; buna daha önce ziyaret edilen sayfaların favicon ve başlıkları, arama motoru kısayolları ve genel URL tamamlama da dahil (#8933)
    • SQLite tabanlı HistoryStore, tüm gezintiler için başlık, favicon, ziyaret sayısı ve son ziyaret zamanını saklıyor
    • Gizlilik ayarları sayfasına “Clear browsing history” bağlandı ve hem Qt hem de AppKit arayüzleri yeni zengin satırları render ediyor
  • GTK4 / libadwaita frontend’i

    • Ladybird’e, mevcut Qt frontend’inin yanında sunulan GTK4 ve libadwaita tabanlı yeni bir Linux frontend’i eklendi (#8691)
    • GNOME Web (Epiphany)’den ilham alındı ve GNOME tasarım yönergelerine uygun olarak menü çubuğu yerine hamburger menü ve AdwTabView sekmeleri kullanılıyor
    • URL çubuğu otomatik tamamlama ve güvenlik simgesi, sayfa içinde bulma, tam ekran, bağlam menüsü, alert/confirm/prompt/color/file diyalogları, pano, çoklu pencere, açık/koyu tema ve DPR ölçeklendirme sunuyor
    • Hâlâ erken aşamada olduğu için Qt ve AppKit frontend’leriyle özellik eşitliğine henüz ulaşmış değil
  • Yer imleri

    • Geçen ay eklenen yer imlerine bir yönetim arayüzü de eklendi
    • Yer imleri ve klasörler about:bookmarks sayfasından yönetilebiliyor (#8825)
    • Yeni sayfa, yer imlerini içe aktarma ve dışa aktarmayı destekliyor (#8938)
    • Yer imleri ve klasörleri düzenlemek için bağlam menüsü eklendi (#8715)
    • Tüm yer imlerine ve klasörlere date_added zaman damgası eklendi (#8867)
    • Yer imi çubuğunda yeni sekmede açma, URL kopyalama, orta tıklamayla ve Ctrl/Cmd+klik ile yeni sekmede açma destekleniyor (#8758)
    • HTML5 sürükle ve bırak API’si bağlandı; about:bookmarks bunu yeniden sıralama için kullanıyor ve normal web sayfalarında da çalışıyor (#8783)

HTML ayrıştırma, betik yürütme, render hattı

  • Tahmine dayalı ve kademeli HTML ayrıştırma

    • HTML ayrıştırıcısı, yanıt gövdesini kademeli olarak tüketecek şekilde değiştirildi(#9151)
    • Baytlar, akış tabanlı bir metin kod çözücüsünden geçerek tokenizer'a parça parça giriyor; girdi yetersizse tokenizer duruyor ve daha fazla veri geldiğinde devam ediyor
    • Bu, ayrıştırmaya başlamadan önce tüm gövdenin alınmasını bekleyen önceki modelin yerini alıyor
    • Tahmine dayalı HTML ayrıştırıcısı da uygulandı(#9114)
    • Ana ayrıştırıcı senkron harici bir betikte engellenirse, ayrı bir tokenizer henüz ayrıştırılmamış girdiyi önden tarıyor ve <script src>, <link rel=stylesheet|preload>, <img src> kaynakları için tahmine dayalı getirme işlemleri başlatıyor
    • <base href> izleniyor ve şablonların ve foreign content içinin doğru şekilde atlanması sağlanıyor
    • Tahmine dayalı ayrıştırıcı, belgenin preload map'ine bağlandı; böylece tahminle bulunan kaynaklar, normal ayrıştırıcının daha sonra yapacağı getirmelerle yinelenmiyor(#9164)
  • Off-thread JavaScript derleme

    • Getirilen betiklerin üst düzey kodu için bytecode üretimi, arka plan iş parçacığı havuzunda çalışıyor(#9118)
    • Worker iş parçacıkları, bytecode'u ve Executable oluşturmak için gereken verileri hazırlıyor; VM veya GC heap'e dokunan işler ana iş parçacığında kalıyor
    • Classic script, module ve üst düzey IIFE işleniyor; yalnızca YouTube'un yüklenmesinde bile yaklaşık 200ms ana iş parçacığı süresi arka plan iş parçacıklarına taşınıyor
  • Navigable başına rasterization

    • Her Navigable, kendi iş parçacığında bağımsız olarak rasterize ediliyor(#8793)
    • Önceden iframe'ler, ebeveyn display list içindeki iç içe display list'ler olarak senkron şekilde boyanıyordu; bu yüzden yalnızca en üst traversable'ın render iş parçacığı aktif oluyordu
    • Ebeveyn display list artık her iframe'in rasterize edilmiş çıktısını ExternalContentSource üzerinden referanslıyor; bu nedenle iframe invalidation'ı ebeveynin yeniden kaydedilmesini gerektirmiyor
    • Bu, paralelliğe ek olarak iframe'leri ayrı sandbox süreçlerine taşımaya yönelik bir hazırlık çalışması
  • Linux dmabuf tabanlı GPU boyama

    • Linux Vulkan derlemelerinde WebContent, GPU destekli bir Skia surface üzerine çizim yapıyordu; ancak UI süreciyle paylaşılan tampon CPU bitmap'i olduğu için her flush işleminde GPU'dan CPU'ya readback oluşuyordu
    • SharedImage, Linux dmabuf handle'larını tutabilecek hale geldi; böylece front/back buffer, UI sürecine kadar GPU üzerinde kalıyor(#8917, #8920)

JavaScript motoru performansı ve uyumluluğu

  • JS-to-JS çağrı optimizasyonu

    • Call, Return, End komutlarının genel durumda AsmInt assembly yorumlayıcısının içinde kalmasını sağlayan çeşitli PR'ler uygulandı(#8891, #8909, #8912)
    • Register kaydetme/geri yükleme için elle ayarlanmış ARM64 paired load/store (ldp/stp) kullanılıyor
    • native function çağrıları da AK::Function yerine normal function pointer tutan yeni RawNativeFunction variant'ı üzerinden doğrudan AsmInt içinde dispatch ediliyor(#8922)
  • O(1) bytecode register ayırıcı

    • Generator::allocate_register, kullanılabilir havuzu tarayıp en düşük numaralı register'ı bulan bir yapıdaydı ve x.com yüklenirken yalnızca bu fonksiyon yaklaşık 800ms harcıyordu
    • C++/Rust pipeline eşdeğerliği dönemi sona erdikten sonra ayırıcı basit bir LIFO stack'e dönüştürüldü(#9007)
  • Önbelleğe alınmış for-in yinelemesi

    • for (key in obj) konumu, düzleştirilmiş enumerable key anlık görüntüsünü önbelleğe alıyor ve receiver'ın shape'i, indexed storage'ı ve prototype chain'i korunduğu sürece bunu yeniden kullanıyor(#8856)
    • Speedometer 2, 67.7 → 73.6, Speedometer 3 ise 4.11 → 4.22 seviyesine yükseldi
  • Diğer motor iyileştirmeleri

    • Parser, lexer, parser ve scope collector genelinde identifier adlarını zero-copy olarak paylaşıyor; bu da web sitesi JS corpus'unda parse işlemini 1.14 kat hızlandırırken RSS'yi 282MB azaltıyor(#8801)
    • Kısa string birleştirmeleri, sonuç zaten flat string olarak gözlemlenecekse rope gösterimini atlıyor; bu da yoğun a + b döngülerinde 2.13 kat hızlanma sağlıyor(#9184)
    • lexical-this arrow function'lar, her çağrıda function environment ayırmadığı için mikrokıyaslamalarda 2.13 kat iyileşiyor(#9192)
    • sparse array'ler, hole'lar için anlık maliyet ödemiyor ve Array(20_000_000) 20 milyon sanal öğeyle orantılı işlem yapmak yerine büyük ölçüde metadata olarak kalıyor(#8847)
    • Yeni lazy JS::Substring türü, regexp capture ile slice, split ve indexed access gibi string builtin'lerini destekliyor; Octane regexp benchmark'ında 1.066 kat iyileşme sağlıyor(#8863)
    • Bytecode source map içinde source position uçtan uca korunuyor ve x.com'da yaklaşık 250ms tasarruf sağlıyor(#9027)
    • zero-copy TransferArrayBuffer, YouTube yüklemesinde yaklaşık 130ms tasarruf sağlıyor(#9088)
    • cached typed-array view yapısı WeakHashSet'ten intrusive list'e çevrilerek pdf.js'de Intel ISA PDF yüklenirken yaklaşık 250ms tasarruf sağlandı(#9180)
    • Tüm Promise'lerin, capture etmeyen AK::Function closure'larına sahip 2 adet PromiseResolvingFunction hücresi ayırdığı yapı; Kind enum'u üzerinden dispatch edilen static function'lara dönüştürüldü ve resolver başına ayırma kaldırıldı(#9188)
    • non-dictionary shape'lerin property-table marking işlemi atlanarak maptiler.com yüklenirken GC süresi 1.3 saniye azaltıldı(#9044)
    • packed array'ler için Array.prototype.indexOf fast path'i eklendi(#9123)
    • Array.prototype.sort, her karşılaştırmada yeniden transcoding yapmak yerine önbelleğe alınmış UTF-16'yı yeniden kullanıyor(#9036)
    • WASM, JSON, CSS modules import desteği eklendi(#6029)
    • ShadowRealm teklifi standartlaşma sürecinde durakladığı için destek kaldırıldı(#8753)

Web platformu API'leri ve CSS

  • Cache ve CacheStorage

    • Cache ve CacheStorage uçtan uca uygulandı(#8745)
    • open, has, delete, keys, match, matchAll, add, addAll, put dahil 9 yöntem, geçici bellek içi depolama temelinde çalışıyor
  • CSS özellikleri ve render düzeltmeleri

    • image-set() için standart ve -webkit- önekli biçime temel destek eklendi; boyama sırasında device pixel ratio ile en iyi eşleşen çözünürlük adayı seçiliyor ve desteklenmeyen MIME türleri atlanıyor(#9090)
    • image-set() desteği sayesinde gocomics.com üzerindeki başlık görseli görüntüleniyor
    • position-anchor ve CSS anchor positioning için ilk destek eklendi; böylece cssdoom.wtf üzerindeki el ve silahın konumu düzeltildi(#8686)
    • Renk enterpolasyonu css-color-4 ile uyumlu olacak şekilde yeniden yazıldı; u8 yerine float üzerinde enterpolasyon yapılıyor ve missing/powerless component, out-of-gamut sRGB ile alpha multiplier tutarlı biçimde ele alınıyor(#8934)
    • align, bgcolor gibi eski presentational HTML attribute'ları artık doğrudan cascaded properties kullanmak yerine normal author declaration'lar gibi cascade içinden geçiyor; böylece var() ikamesi ve invalid-at-computed-value-time fallback doğru çalışıyor(#9176)
    • Presentational hint cascade değişikliği sayesinde html.spec.whatwg.org üzerindeki çökme düzeltildi
    • <thead>, <tbody>, <tfoot>, <tr>, align presentational attribute'unu yansıtıyor; böylece bricklink.com üzerindeki düğme yerleşimi düzeltildi(#9177)
    • stroke-dasharray enterpolasyonu sayesinde SVG çizgileri akıcı şekilde animasyonlu hale geldi(#9133)
    • autofocus attribute'una sahip öğeler, sayfa yüklenirken gerçekten odak alıyor(#9016)
    • RTL metindeki liste işaretleri sağ tarafa yerleştirildi; böylece Arabic Wikipedia'daki liste render'ı düzeltildi(#9099)
    • Satır içi flex/grid container'ların baseline'ı artık son sarılmış satırdan değil, çocuğun ilk satır kutusundan türetiliyor; böylece nos.nl üzerindeki bağlantı metni ve simge hizalaması düzeltildi(#9183)

Ağ oluşturma ve stil geçersiz kılma

  • Ağ oluşturma

    • getaddrinfo artık event loop'u bloklamıyor
    • LibDNS, lookup işlemlerini thread pool içinde çalıştırıyor, A ve AAAA query'lerini paralel olarak gönderiyor ve aynı ad için eşzamanlı lookup'ları birleştiriyor(#9109)
    • RequestServer'ın preconnect yolu, resolver'ı atlayıp libcurl'ün threaded resolver'ının main thread üzerinde pthread_join tetiklemesine neden oluyordu; bu sorun, aynı DNS pool yoluna yönlendirilerek düzeltildi(#9109)
    • WebContent ağdan daha yavaş kaldığında, RequestServer'daki queued response data drain işlemi O(n²) idi ve YouTube videosu açılırken memcpy üzerinde yaklaşık 30 saniye, Vector::remove üzerinde ise 3 saniye harcıyordu
    • AllocatingMemoryStream, singly-linked chunk list yapısına dönüştürüldü; böylece tüketim O(1) oldu(#9028)
    • Görsel isteklerinin Accept header'ında AVIF ve WebP duyurularak diğer motorlarla uyum sağlandı; bazı CDN'ler bu header'a göre modern format sunup sunmayacağına veya JPEG fallback kullanıp kullanmayacağına karar veriyor(#9046)
  • Stil geçersiz kılma

    • Mevcut selector invalidation, selector'ların yalnızca aşağı yönlü baktığı varsayımıyla basitti; ancak :host ve :has() nedeniyle descendant değişiklikleri bir ancestor'un :has() sonucunu değiştirebildiğinden, yukarı doğru yürüyen bir walk gerekli hale geldi
    • Bir stylesheet mutation yalnızca tek bir scope'u değiştirdiğinde tüm style scope cache'lerinin yeniden oluşturulmaması sağlandı; böylece Reddit rule cache rebuild süresi 13.2 saniyeden 3.2 saniyeye düştü(#9138)
    • Sibling structural invalidation artık position'ı gözlemlemeyen descendant'lara yayılmıyor; bu sayede Reddit infinite scroll'da gereksiz recompute işlemleri %11 azaldı(#9155)
    • :has() mutation invalidation, etkilenmeyen anchor'ları atlıyor ve azure.com üzerinde büyük bir azalma ölçüldü(#9168)
    • Intel ISA PDF'inde :has() child-list visit sayısı 71k → 1.6k seviyesine düştü ve pdf.js yüklemesinde yaklaşık 650ms tasarruf sağlandı(#9179)
    • Yeni structural-invalidation test paketi, çeşitli geçersiz kılma eksikliklerini ortaya çıkardı ve bunlar düzeltildi(#9095)
    • Hover, stylesheet mutation scope, custom-property map ve computed-style diffing çevresinde küçük iyileştirmeler de yer alıyor(#9077, #9049, #9079, #9080, #9141)

Bellek ayırma ve derleme sistemi

  • Varsayılan ayırıcı olarak mimalloc

    • C++ ve Rust kodu, system allocator üzerinden geçmeden tek bir mimalloc v2 allocator instance'ını paylaşıyor(#8752)
    • malloc() sistem genelinde override edilmediği için third-party library'ler kendi allocator contract'larını koruyor
    • JS benchmark'ları genel olarak iyileşti
  • Rust zorunluluğu ve build system sadeleştirmesi

    • ENABLE_RUST build seçeneği kaldırıldı ve Rust zorunlu hale geldi(#8742)
    • GN build system tamamen kaldırıldı ve tek referans olarak CMake kaldı(#8931)
  • GC ve bellekle ilgili değişiklikler

    • -ftrivial-auto-var-init=zero ile derlenerek, fonksiyon girişinde eski GC pointer'larının üzeri 0 ile yazılıyor; böylece conservative stack scanner bunları daha az buluyor(#9171)
    • Nadiren kullanılan UsedValues property'si lazy pointer'ın arkasına taşındı; böylece struct boyutu 424 bayttan 176 bayta düştü ve sainsburys.co.uk yüklenirken LayoutState::populate_node_from() süresi 139ms → 65ms oldu(#9104)
    • Fetch body chunk'larının, chunk başına 7 GC object ayıran pull-promise yolu yerine doğrudan byte stream controller'a gitmesi sağlandı(#9169)

İyileştirilmiş site davranışı

  • Reddit

    • Reddit görsel galeri karuseli artık çalışıyor; ::slotted() eşleştirmesi ve bölünmüş inline öğenin absolutely positioned descendant’ı çevresindeki birbiriyle ilgisiz 2 layout hatası düzeltildi(#9148)
    • TextDecoderStream sayesinde SPA bağlantı tıklamalarını artık yutmuyor ve yorumlar açılabiliyor
    • infinite scroll da structural invalidation çalışmasından etkileniyor
  • YouTube

    • YouTube, off-thread top-level JS derleme, off-thread WOFF2 açma, @font-face fetch fanout azaltımı, RequestServer memory churn düzeltmesi ve zero-copy TransferArrayBuffer değişikliklerinden faydalanıyor
    • off-thread WOFF2 açma Gmail’de de yaklaşık 170ms kazandırıyor(#8976)
    • ilk yüklemede @font-face fetch fanout 177 → yaklaşık 9 seviyesine düştü(#9032)
  • Diğer siteler

    • gocomics.com artık image-set() sayesinde başlık görselini gösterebiliyor
    • yandex.com/maps için WEBGL_debug_renderer_info uzantısını da içeren WebGL düzeltmeleri sayesinde vector-tile WebGL render etme çalışıyor(#9043)
    • strava.com, Navigator.getBattery artık kendi hatası yerine spec-mandated error type fırlattığı için giriş yapabiliyor(#8770)
    • GitHub Insights, Element.matches() ve .closest() selector cache sayesinde yaklaşık 100ms daha hızlı yükleniyor(#8987)
    • tweakers.net dizüstü karşılaştırma sayfası, indexed HTMLFormElement property name lookup sayesinde yaklaşık %31 hızlandı(#9009)
    • neon.com artık crash olmuyor(#8812)
    • channel4.com için flex auto-margin resolution düzeltmesi, category text’in dikey hizalama sorununu çözüyor(#9050)
    • Cloudflare Turnstile hâlâ geçilemiyor, ancak auth-scheme handling, Array.prototype.shift() optimizasyonu ve <input> range ile number element’lerinin UA event handler hardening’i sayesinde artık çok daha hızlı başarısız oluyor(#9063)

WPT ve diğer platform değişiklikleri

  • Web Platform Tests

    • WPT puanı 2,003,537 → 2,067,263 seviyesine yükseldi ve bu ay 63.726 subtest artışı kaydedildi
    • Ancak WPT, resmî ECMAScript conformance suite olan test262’yi upstream’den alarak JavaScript subtest sayısına 53.207 ekledi
    • Ladybird, test262’yi yıllardır ayrı çalıştırıyordu ve LibJS conformance durumu iyi olduğu için bunların 52.045’ini, yani %97,8’ini geçiyor
    • 63,7k’lık artışın yaklaşık 52k’sı test262 import’undan geldi; kalan yaklaşık 11,7k ise tarayıcı platformunda gerçek yeni ilerleme
    • test262 import’u ile WPT artık JavaScript conformance’ı platformun geri kalanıyla birlikte ölçüyor
  • Metin, layout, süreç ve UI

    • ligature içeren metinlerde selection ve hit testing, her glyph için bir code unit varsayan yapıdan; grapheme cluster’ları dolaşıp glyph advance’i ilgili grapheme’lere dağıtan yapıya geçti(#8829)
    • shadow root üzerinde innerHTML ayarlamak artık tüm document layout tree’sini geçersiz kılmıyor ve pomax.github.io/bezierinfo üzerinde layout-and-paint süresi %21 azaldı(#9191)
    • popup sekmesi başka bir siteye yönlendirilse bile parent’ın WebContent process’i artık sonlandırılmıyor(#8730)
    • Qt UI’de Ctrl+Tab ve Ctrl+Shift+Tab ile açık sekmeler arasında dolaşılabiliyor(#8704)
    • orta fare düğmesi basılı tutularak sürükleyip kaydırma yapılabiliyor veya yerinde tıklamayla autoscroll mode’a girilebiliyor(#8881, #8928)
    • adres çubuğu girdisi URL’ye ya da arama sorgusuna sanitize edilemediğinde, girdiyi sessizce atmak yerine uygun bir error page gösteriliyor(#9072)
    • TextDecoder’ın streaming counterpart’ı olan TextDecoderStream implemente edildi; böylece chunk sınırlarında kısmi UTF-8 hold-back yapılarak Reddit yorum düzenleme özelliği mümkün oldu(#9143)
    • cross-process BroadcastChannel mesajları artık WebContent ile WebWorker process’leri arasında IPC ile yönlendiriliyor; böylece listener hangi process’te olursa olsun diğer tarayıcılardaki gibi çalışıyor(#8865)

1 yorum

 
GN⁺ 2 시간 전
Hacker News yorumları
  • JavaScript'siz bir tarayıcı kullanmak istiyorsanız, Dioxus'un yaptığı tarayıcı prototipi de epey iyi hale geliyor
    Bir Rust GUI framework'ü olan Dioxus, native renderer'ın bir parçası olarak geliştiriliyor ve Flutter gibi Skia'ya alternatifini kendisi yapma yönünde ilerliyor; ancak Flutter web'in sadece canvas kullanmasından farklı olarak web'de de HTML/CSS standartlarıyla çalışıyor
    Mevcut tarayıcı kodları olan Chromium, Gecko, WebKit'e bağlı değil ve Servo'nun da kullandığı stylo ve taffy gibi Rust crate'lerinden yararlanan, neredeyse sıfırdan yapılmış bir implementasyona yakın: https://github.com/DioxusLabs/blitz (/apps/browser)
  • Tarayıcı geliştirmede en zor kısım her zaman yapay web uyumluluğu oldu
    Birçok web sitesi belirli tarayıcıların yüklenmesini zorla engelliyor ve sadece Chromium'a izin veriyor; Ladybird'ün karşılaşacağı gerçeklik bu ve yeni tarayıcı rekabetini engelleyen büyük bir etken
    DRM Widevine'ı elde etmek de yeni tarayıcılar için çok zor; 10 milyon kullanıcılı Zen Browser bile bunu başaramadı
    • Ne yazık ki yeni nesil, IE'nin derslerini öğrenmedi ve Chrome OS Platform rüzgarını takip etmeyen taraf olduğunda ilk şikayet eden de kendisi oluyor
    • Böyle bir engellemenin gerçekte ne kadar yaygın olduğunu bilmiyorum
      Son 20 yıldır sadece Firefox kullanıyorum ama uyumluluk için Chromium'a geçmemi isteyen tek bir site bile görmedim
    • Eğer bu tür yapay eşikler birlikte çalışabilirliği ciddi biçimde etkileyecek kadar büyükse, zaten engelin %99'u aşılmış demektir ve çoğu zaman User-Agent dizgesi taklidi ile geçilebilir
      Widevine gerçek bir eşik ama pratikte daha çok Netflix, Disney gibi bazı yayın sitelerinde 4K oynatmayı engelliyor
      Zen'in Widevine olmadan da 10 milyon kullanıcı topladığını düşününce, bunun vazgeçilmez derecede kritik olduğunu söylemek zor
    • Ladybird tam da bu yüzden kısa süre önce kendini Chrome olarak bildirmeye başladı
    • Amaç uyumluluk testi ise User-Agent taklit edilebilir
      Tarayıcının kendisini kontrol ediyorsanız, DRM ile ilgili sorunlar dışında neredeyse imkansız bir şey yok
  • Oldukça kullanılabilir hale geliyor gibi görünüyor
    Bu tür yazılar bana oyun emülatörü güncellemelerini okumanın verdiği keyfi hatırlatıyor
    “X hatası düzeltildi, Y artık düzgün çalışıyor ve sonuç olarak Z oyunu açılıyor” gibi; bu kez düzeltilenlerden biri CSS Doom olduğu için oyun tarafıyla da bir miktar kesişim var
    • Yerinde bir benzetme
      Andreas'ın tarayıcı yapmayı emülatör yapmakla aynı şey gibi gördüğünü birkaç kez söylediğini duydum
      Her web sitesi farklı özellikleri farklı şekillerde kullanıyor ve o da web sitelerini ROM'lara benzetiyor
  • Ladybird gerçekten çok iyi ilerliyor
    Eski bir Firefox kullanıcısı olarak, Ladybird çok erken alfa aşamasına girip önceden derlenmiş build'ler çıkmaya başlar başlamaz kesinlikle ilk deneyenlerden biri olacağım
    • Bu aşamada bir kez çalıştırmak isterseniz, local build kolay; bağımlılıkları kurup build script'ini çalıştırmak için birkaç komut yeterli: https://github.com/LadybirdBrowser/ladybird/blob/master/Docu...
    • Mozilla'nın en azından güçlü bir sarsıntıya ihtiyacı var
    • Kendi başınıza derlemek de oldukça kolay; özellikle bunu Claude Code'dan isterseniz daha da kolay
  • GTK4 / libadwaita frontend olması güzel
    Qt yerine GTK UI/UX tercih ettiğim için, bu taraftaki geliştirmelerin ilerlemesini merakla bekliyorum
  • strava.com : Login works now that Navigator.getBattery throws the spec-mandated error type instead of one of our own (#8770).
    Strava neden pil seviyemi bilmek istiyor?
    • Büyük olasılıkla izleme için benzersiz parmak izi oluşturmak istiyordur
    • Battery API'yi düşük güç tüketimli site sürümünü seçmek için bir sezgisel yöntem olarak kullanıyor da olabilir
      Gelişmekte olan ülkeler için web'e özel bir sürüm olabilir ya da pil düşükse tasarruf için konum sorgulama sıklığını azaltmak istiyor olabilir
      Tamamen tahmin ama Strava gibi bir sitenin pil bilgisini istemesi bütünüyle anlamsız değil; yine de genel olarak biraz şüpheli duruyor
    • Strava bir rota takip hizmeti
      Bunun web sitesi üzerinden de kullanıldığını varsayarsak, konum sorgulama sıklığını doğruluk ile güç tüketimi arasında denge kuracak şekilde ayarlamak istiyor olması muhtemel
    • Hesapları brute-force etmeye çalışan botlar bu API'yi gerçek cihazlar gibi implemente etmemiş olabilir
  • Önceki gönderi: https://news.ycombinator.com/item?id=47985497
  • SerenityOS'un gitmek istediği yön gerçekten çok iyi ve keşke bu odak Ladybird tarayıcısında da korunabilse
  • Tebrikler
    Ama RTL metindeki liste işaretleri ekran görüntüsünde hâlâ aynı görünüyor
    Her iki durumda da liste işaretleri solda
  • https://ladybird.org/assets/img/newsletter-apr-2026-reddit-g...
    Ladybird Reddit testinde Evangelion r/unixporn kullanan kişiye gerçekten saygı duydum
    Evangelion'u çok izlemedim ama açıklama belgesellerini sayısız kez izledim ve bir dönem duvar kağıdı olarak bile kullanacak kadar sevdim
    Asıl önemli nokta, Reddit'in Ladybird'de çalışıyor olması ve bunun inanılmaz olması
    YouTube'un çalışıp çalışmadığını bilmiyorum ama onun da çalışmasını umuyorum; o noktada Ladybird gerçekten günlük kullanıma yaklaşmış gibi hissettiriyor
    Ladybird'e destek veren https://jakubsteplow.ski/'ye de teşekkürler
    Açık kaynak projelere bağış yapan insanları Google reklamları gibi şeylerden daha iyi yöntemlerle daha görünür kılmak isterim; Jakub için her şeyin iyi gitmesini diliyorum ve başkalarının da Ladybird gibi projelere bağımsız olarak bağış yapmasını umuyorum
    Human Rights Foundation'ın https://hrf.org/program/ai-for-individual-rights/ programına da teşekkürler
    Tarayıcıların neredeyse tekli/çoklu bir oligopol halinde olduğu bir ortamda, bir kişinin bunu bu noktaya kadar getirmiş olması şaşırtıcı ve gerçekten ilham verici
    • EVA'yı severim ama temkinli biçimde tavsiye ederim
      İki büyük yönü var; biri harika bir estetiğe sahip mecha/uzaylı/canavar bilim kurgu, diğeri ise kendinden nefret ve yalnızlığa odaklanan kişisel bir drama
      Çoğu kişi için ilk yön daha çekici olacaktır ama bugüne kadar kalıcı olan ikinci yönü
      İzleyecekseniz izleme sırasına dikkat etmek gerekir
      Orijinal TV serisi ve ardından gelen “End of Evangelion” filmiyle ilerleyen bir zaman çizgisi var; bir de tam bir reboot olarak başlayıp bir şekilde orijinalin nihai reboot/remake/devamı haline gelen ayrı bir “Rebuild of Eva” film serisi var
    • https://ladybird.org/#about
      “Bugün tarayıcı üzerinde çalışan kaç kişi var?” sorusuna yanıt olarak, şu anda Ladybird'de 8 ücretli tam zamanlı mühendis olduğu ve ayrıca büyük bir gönüllü katkıcı topluluğu bulunduğu yazıyor
    • YouTube Ladybird'de çalışıyor
      Çoğu şey de çalışıyor ama hız dışında en büyük sorun, birçok ‘insan olduğunu doğrulama’ kontrolünün Ladybird'de düzgün çalışmaması