1 poin oleh GN⁺ 3 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Servo 0.3.0 adalah rilis yang memuat 391 commit yang digabungkan pada Mei, sekaligus mencakup perbaikan untuk platform web, API embedding, performa, stabilitas, dan keamanan
  • Di platform web, kompatibilitas dengan situs nyata diperluas lewat tambahan font-variant-*, pemutaran mp4 `` tanpa fast start, encoding form, dan DOM API
  • Dari sisi keamanan, runtime JS dinaikkan ke SpiderMonkey 140.10.1 untuk memperbaiki bug keamanan memori, terkait dengan CVE-2026-7322, CVE-2026-7323, dan MFSA 2026-36
  • Pengguna dan developer dapat memanfaatkan opsi --host-file=, --userscripts= di servoshell serta blackboxing “Ignore source” di Firefox DevTools Debugger
  • Embedder perlu menyesuaikan persyaratan Rust 1.88.0 atau lebih baru serta breaking change pada SiteDataManager, Preferences, dan DiagnosticsLogging; peningkatan performa berfokus pada pengurangan traversal layout dan penyatuan thread pool

Perubahan Mei yang termasuk dalam Servo 0.3.0

  • Servo 0.3.0 memuat perubahan yang digabungkan pada Mei, dengan total 391 commit
  • Fitur platform web baru ditambahkan di area kompatibilitas font, media, form, dan layout
    • Fitur font CSS: font-kerning: none, font-variant-east-asian, font-variant-ligatures, font-variant-numeric, font-variant-position
    • Media dan form: dukungan untuk file mp4 tanpa fast start,, ``
    • Layout: layout ``
  • DOM API juga bertambah di beberapa area standar
    • Properti onslotchange ditambahkan ke ShadowRoot
    • screenLeft, screenTop ditambahkan ke Window
    • new Blob() mendukung {endings: "native"}
    • new PerformanceMark() ditambahkan
    • parseHTML() ditambahkan ke Document
    • readAsBinaryString() ditambahkan ke FileReader
    • performance.measure() mendukung nilai mark redirectStart, redirectEnd, secureConnectionStart, responseEnd
  • Masalah build di Windows, FreeBSD, NixOS, atau lingkungan berbasis Nix juga diperbaiki

Keamanan: perbaikan keamanan memori SpiderMonkey

  • SpiderMonkey 140.10.0, runtime JS Servo, memiliki beberapa bug keamanan memori
  • Servo 0.3.0 memperbaiki masalah tersebut dengan pembaruan ke SpiderMonkey 140.10.1
  • Detailnya dapat dilihat di CVE-2026-7322, CVE-2026-7323, dan MFSA 2026-36

Fitur web yang sedang dikerjakan

  • Implementasi document.execCommand() terus berjalan untuk dukungan rich text editing, dan bekerja di bawah --pref dom_exec_command_enabled
    • Rilis ini mendukung perintah backColor, foreColor, createLink, unlink, superscript, subscript, removeFormat
    • Perintah insertParagraph didukung sebagian
  • Pekerjaan Sanitizer API berlanjut di bawah --pref dom_sanitizer_enabled
    • Diaktifkan dalam mode eksperimental servoshell
    • setComments(), setDataAttributes(), allowProcessingInstruction(), removeProcessingInstruction(), removeUnsafe() pada Sanitizer ditambahkan
  • IndexedDB sedang ditingkatkan di bawah --pref dom_indexeddb_enabled, dan kesesuaian standar IDBTransaction.abort() meningkat
  • Fitur-fitur di atas diaktifkan dalam mode eksperimental servoshell
  • Dukungan aksesibilitas mencakup algoritme name from contents dan perubahan untuk membangun secara bertahap accessibility tree
    • Pembangunan accessibility tree secara bertahap penting untuk performa konten web nyata
  • Implementasi terkait worker juga dimulai
    • SharedWorker mendukung new SharedWorker() di bawah --pref dom_sharedworker_enabled
    • Untuk ServiceWorker, sebagian API ditambahkan di bawah --pref dom_serviceworker_enabled

Perubahan API embedding dan poin migrasi

  • Minimum supported Rust version Servo, MSRV, naik dari 1.86.0 menjadi 1.88.0 atau lebih baru
    • Uji kompilasi dilakukan dengan MSRV, tetapi sebagian besar pengujian dilakukan dengan Rust 1.95.0
  • Ada breaking change pada metode cookie SiteDataManager
    • clear_cookies, clear_session_cookies, set_cookie_for_url menerima argumen callback tambahan, sehingga pemanggilan asinkron menjadi mungkin
    • Untuk mempertahankan pemanggilan sinkron, berikan None ke callback
    • set_cookie_for_url_async dihapus, dan harus diganti dengan bentuk set_cookie_for_url(Some(Box::new(callback)))
  • API Preferences merapikan nama pengaturan thread pool
  • API DiagnosticsLogging juga dikerjakan ulang
    • Opsi diatur dengan toggle_option, dan status aktifnya diperiksa dengan is_enabled
    • Setiap opsi adalah variant dari tipe baru DiagnosticsLoggingOption
    • Field pub per opsi pada DiagnosticsLogging dihapus, dan penulisan serta pembacaan field masing-masing harus diganti dengan toggle_option dan is_enabled
    • extend_from_string tidak lagi menerima opsi help, dan implementasi tersebut dipindahkan ke servoshell

Fitur untuk pengguna dan developer

  • Dua opsi baru ditambahkan ke servoshell
    • --host-file= menetapkan path hosts file, sebagai alternatif untuk variabel lingkungan HOST_FILE
    • --userscripts= menentukan direktori skrip pengguna yang akan dijalankan di semua dokumen
  • Blackboxing skrip kini dimungkinkan di tab Firefox DevTools Debugger
    • Jika mengklik “Ignore source”, breakpoint tidak akan terpasang di dalam skrip tersebut
    • Saat menelusuri eksekusi secara bertahap di debugger, seharusnya juga tidak berhenti di dalam skrip tersebut
    • Akurasi panel Scopes juga ditingkatkan
  • Developer Servo sendiri tidak dapat menggunakan output dari large language model atau alat AI generatif dalam kontribusi, sesuai kebijakan proyek
    • Untuk menegakkannya, ditambahkan pemeriksaan CI yang menolak kontribusi yang menyertakan AI agent sebagai coauthor
  • Masalah build --features vello juga diperbaiki

Peningkatan detail platform web

  • Tampilan default beberapa elemen HTML ditingkatkan
    • Sasarannya adalah , , , , , , , , , , , , ``
  • CryptoKey kini dapat diserialisasi sehingga bisa digunakan dengan structuredClone() dan postMessage()
  • Pesan error JS di berbagai bagian DOM ditingkatkan
  • Peningkatan kesesuaian standar mencakup area berikut
    • Pengiriman form, navigasi tab, navigasi URL javascript:
    • Header Refresh dan ``
    • line-break: anywhere, Location.assign()
    • crypto.subtle.deriveBits(), getComputedStyle(), performance.measure()
    • FileReader.readAsDataURL(), Blob.stream()
    • ML-KEM pada SubtleCrypto
  • Di sisi WebGPU, GPUSupportedLimits, GPUTexture, GPUDevice.createBindGroup(), dan fitur WebGPU lainnya ditingkatkan
  • Perbaikan bug mencakup `` dan Content-Security-Policy, :active, :hover, align-items, border-image-outset, padding pada overflow: scroll, event pointerup, event slotchange, import() dinamis, CanvasRenderingContext2D.clip(), dan lainnya

Peningkatan performa: pengurangan traversal layout dan pemrosesan tunda

  • Untuk meningkatkan about:memory, dibuat alat yang menemukan alokasi yang tidak terlacak
  • Thread pool untuk image cache, web storage, dan IndexedDB disatukan, sehingga jumlah thread OS yang diperlukan per CPU berkurang
  • Optimasi layout berfokus pada pengurangan biaya traversal fragment tree dan caching
    • Fragment tree sebagian besar menjadi immutable, sehingga biaya runtime borrow AtomicRefCell hilang pada banyak akses
    • Perhitungan containing block dan pembangunan stacking context tree dalam sebagian besar kasus digabungkan menjadi satu traversal fragment tree
    • Perhitungan scrollable overflow diubah menjadi lazy dan incremental, sehingga traversal seluruh fragment tree praktis dihilangkan
    • Caching fragment, hasil shaping, dan hasil layout lainnya antar-reflow ditingkatkan
    • Presisi incremental fragment layout ditingkatkan
    • Penggunaan memori text shaping berkurang
  • Pemrosesan DOM attributes juga dibuat lebih efisien
    • Saat skrip menulis nilai atribut, serialisasi dihindari hingga nilai itu dibaca kembali, dan penulisan inline style yang sering menjadi hingga 25% lebih cepat
    • Saat parsing HTML atau membaca atribut internal, pembuatan node Attr dihindari hingga benar-benar dibutuhkan oleh skrip, sehingga penggunaan memori dan kemungkinan garbage collection menurun
  • Perilaku yang menelusuri seluruh DOM tree setiap kali ditempelkan ke tree dihapus, dan ini terasa pada parsing dokumen dengan banyak tag
  • Stylesheet lock menggunakan AtomicRefCell yang lebih efisien daripada parking_lot::RwLock
  • Di OpenHarmony, refresh driver nyata ditambahkan untuk mengurangi penggunaan CPU idle, dan font list di-cache ke disk agar startup lebih cepat
  • Untuk memperbaiki waktu build, lebih banyak kode dipisahkan dari script crate yang sangat besar, dan ukuran dependency tree juga dikurangi

Perbaikan stabilitas dan pemanfaatan type system

  • Beberapa crash dan hang diperbaiki
    • content, MediaStream, Element.attributes.item(), CSSKeyframesRule.appendRule(), FocusEvent.initEvent(), Window.stop()
    • document.execCommand("delete")
    • Build --debug-mozjs
    • Evaluasi skrip saat sedang paused di DevTools
    • Pratinjau sebagian nilai JS di DevTools
    • Shaping zero-width space di layout
    • Saat men-toggle mode eksperimental servoshell pada runtime
  • Pekerjaan jangka panjang untuk menggunakan type system Rust agar kegagalan dynamic borrow tertentu menjadi mustahil terus berlanjut

Kontributor dan status sponsor

  • 9 orang menggabungkan patch pertama mereka ke Servo
    • AbdAlRahman Gad, Onyeka Obi, Steve Sharon Sam, avis137, Xabier Rodríguez, June, Matt Van Horn, nicole, panxt8
  • Daftar issue yang cocok untuk kontributor baru tersedia sebagai curated list
  • Sponsor berulang mencapai US$7.659 per bulan, naik 4,2% dibanding April
    • Dana sponsor digunakan untuk server CI dan benchmarking, intern Outreachy, serta dukungan pekerjaan maintainer
  • Di thanks.dev, 35 pengguna GitHub yang bergantung pada Servo sedang menjadi sponsor, bertambah 2 orang dari April
  • Penggunaan dana sponsor diputuskan melalui funding request process publik dari Technical Steering Committee, dan proposal aktif dilacak di servo/project#187

1 komentar

 
GN⁺ 3 jam lalu
Komentar di Lobste.rs
  • Senang karena lobste.rs berjalan hampir sempurna di Servo
    Yang terlihat hanya tautan tebal tidak tampil tebal, font terasa sedikit janggal (terasa seperti Fira Sans), kolom input di halaman login terlalu tipis, dan saat mengeklik kolom teks ini, kursor ditempatkan tidak sesuai dengan posisi klik
    Karena di komentar disebutkan bahwa mesin JavaScript-nya sama dengan Firefox, secara keseluruhan sepertinya berjalan sesuai harapan
    Koreksi: setelah mengaktifkan pengaturan eksperimental, masalah teks tebal terselesaikan
  • Servo sudah dikembangkan bertahun-tahun, dan sebenarnya apa gunanya?
    • Servo adalah proyek eksperimen yang dimulai Mozilla untuk membuat browser baru dengan Rust
      Salah satu tujuan utamanya adalah Microsoft HoloLens, tetapi akhirnya dihentikan sebagai proyek besar, dan sebagian komponennya masuk ke Firefox
      Misalnya, mesin CSS yang sulit ditulis dengan C++ karena sifat multithread-nya adalah salah satunya
      Setelah itu Igalia mengambil alih dan menjadi pengelola baru, dan kini berupaya menghidupkan kembali proyek ini agar menjadi pesaing baru
      Mesin JavaScript-nya sama dengan Firefox
    • Proyek ini dimulai pada 2012, tetapi sejauh yang saya tahu pengembangannya sempat mandek selama beberapa tahun dan baru belakangan ini dilanjutkan kembali dengan cepat
      Tujuannya adalah memiliki alternatif bagi mesin browser utama, khususnya memberi lebih banyak persaingan bagi Blink, mesin Chrome
    • Mengimplementasikan mesin browser dengan bahasa yang aman memori yang dapat lebih mudah memanfaatkan paralelisme dan konkurensi yang didukung perangkat keras saat ini tetap merupakan keuntungan besar, sama seperti ketika proyek ini pertama kali dimulai
      Memiliki implementasi platform web tersendiri yang lepas dari pengaruh perusahaan teknologi raksasa juga penting
      Google saat ini memiliki kekuatan yang terlalu besar, dan Mozilla selama bertahun-tahun telah menunjukkan kinerja yang nyaris paling buruk
      Jadi setidaknya saya mendukungnya beberapa dolar setiap bulan