1 pontos por GN⁺ 3 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • Servo 0.3.0 é um lançamento que incorpora, de uma vez, mudanças na plataforma Web, APIs de embedding, desempenho, estabilidade e correções de segurança, reunindo 391 commits mesclados em maio
  • Na plataforma Web, recursos como font-variant-*, reprodução de mp4 `` sem fast start, codificação de formulários e novas APIs DOM ampliam a compatibilidade com sites reais
  • Em segurança, o runtime JS foi atualizado para SpiderMonkey 140.10.1, corrigindo bugs de segurança de memória, relacionados a CVE-2026-7322, CVE-2026-7323 e MFSA 2026-36
  • Usuários e desenvolvedores podem usar as opções --host-file= e --userscripts= do servoshell, além do blackboxing “Ignore source” no DevTools Debugger do Firefox
  • Embedders precisam refletir a exigência de Rust 1.88.0 ou superior e as breaking changes em SiteDataManager, Preferences e DiagnosticsLogging; as melhorias de desempenho se concentram em reduzir percursos de layout e unificar pools de threads

Mudanças de maio incluídas no Servo 0.3.0

  • Servo 0.3.0 inclui as mudanças mescladas em maio, com um total de 391 commits
  • Novos recursos da plataforma Web foram adicionados em fontes, mídia, formulários e compatibilidade de layout
    • Recursos de fontes CSS: font-kerning: none, font-variant-east-asian, font-variant-ligatures, font-variant-numeric, font-variant-position
    • Mídia e formulários: suporte a arquivos mp4 sem fast start em , , ``
    • Layout: layout de ``
  • As APIs DOM também cresceram em várias áreas de padrões
    • A propriedade onslotchange foi adicionada a ShadowRoot
    • screenLeft e screenTop foram adicionados a Window
    • new Blob() agora oferece suporte a {endings: "native"}
    • new PerformanceMark() foi adicionado
    • parseHTML() foi adicionado a Document
    • readAsBinaryString() foi adicionado a FileReader
    • performance.measure() agora oferece suporte aos valores de marcação redirectStart, redirectEnd, secureConnectionStart e responseEnd
  • Também foram corrigidos problemas de build no Windows, FreeBSD, NixOS ou em ambientes baseados em Nix

Segurança: correções de segurança de memória no SpiderMonkey

  • O runtime JS do Servo, SpiderMonkey 140.10.0, tinha vários bugs de segurança de memória
  • O Servo 0.3.0 corrige esses problemas com a atualização para SpiderMonkey 140.10.1
  • Os detalhes podem ser consultados em CVE-2026-7322, CVE-2026-7323 e MFSA 2026-36

Recursos Web em andamento

  • A implementação de document.execCommand() continua em andamento para suporte a edição de rich text, funcionando sob --pref dom_exec_command_enabled
    • Esta versão oferece suporte aos comandos backColor, foreColor, createLink, unlink, superscript, subscript e removeFormat
    • O comando insertParagraph tem suporte parcial
  • O trabalho na Sanitizer API continua sob --pref dom_sanitizer_enabled
    • Ela é ativada no modo experimental do servoshell
    • Foram adicionados setComments(), setDataAttributes(), allowProcessingInstruction(), removeProcessingInstruction() e removeUnsafe() de Sanitizer
  • IndexedDB segue sendo melhorado sob --pref dom_indexeddb_enabled, e a conformidade de IDBTransaction.abort() com o padrão aumentou
  • Os recursos acima são ativados no modo experimental do servoshell
  • O suporte a acessibilidade inclui mudanças no algoritmo name from contents e na construção incremental da árvore de acessibilidade
    • A construção incremental da árvore de acessibilidade é importante para o desempenho em conteúdo Web real
  • Implementações relacionadas a workers também foram iniciadas
    • SharedWorker oferece suporte a new SharedWorker() sob --pref dom_sharedworker_enabled
    • ServiceWorker recebeu parte da API sob --pref dom_serviceworker_enabled

Mudanças na API de embedding e pontos de migração

  • A versão mínima de Rust com suporte no Servo, MSRV, subiu de 1.86.0 para 1.88.0 ou superior
    • Testes de compilação são feitos com a MSRV, mas a maioria dos testes é executada com Rust 1.95.0
  • Há breaking changes nos métodos de cookies de SiteDataManager
    • clear_cookies, clear_session_cookies e set_cookie_for_url passam a receber um argumento adicional callback, permitindo chamadas assíncronas
    • Para manter chamadas síncronas, passe None em callback
    • set_cookie_for_url_async foi removido e deve ser substituído pelo formato set_cookie_for_url(Some(Box::new(callback)))
  • Na API Preferences, os nomes das configurações de pools de threads foram organizados
  • A API DiagnosticsLogging também foi retrabalhada
    • Configure opções com toggle_option e verifique se estão ativadas com is_enabled
    • Cada opção é uma variante do novo tipo DiagnosticsLoggingOption
    • Os campos pub por opção de DiagnosticsLogging foram removidos, e a escrita e leitura de campos devem ser substituídas por toggle_option e is_enabled, respectivamente
    • extend_from_string não aceita mais a opção help, e essa implementação foi movida para o servoshell

Recursos para usuários e desenvolvedores

  • Duas novas opções foram adicionadas ao servoshell
    • --host-file= define o caminho do arquivo hosts e é uma alternativa à variável de ambiente HOST_FILE
    • --userscripts= especifica um diretório de scripts de usuário a serem executados em todos os documentos
  • Agora é possível fazer blackboxing de scripts na aba DevTools Debugger do Firefox
    • Ao clicar em “Ignore source”, breakpoints não serão acionados dentro desse script
    • Ao avançar a execução passo a passo no depurador, ele também deve se comportar de modo a não parar dentro desse script
    • A precisão do painel Scopes também foi melhorada
  • Desenvolvedores do próprio Servo não podem usar saídas de modelos de linguagem de grande escala ou ferramentas de IA generativa em contribuições, conforme a política do projeto
    • Para impor isso, foi adicionada uma verificação de CI que rejeita contribuições que incluam AI agents como coautores
  • Problemas de build com --features vello também foram corrigidos

Melhorias detalhadas na plataforma Web

  • A exibição padrão de vários elementos HTML foi melhorada
    • Os alvos são , , , , , , , , , , , e ``
  • CryptoKey passou a ser serializável, podendo ser usado em structuredClone() e postMessage()
  • Mensagens de erro JS em várias partes do DOM foram melhoradas
  • As melhorias de conformidade com padrões incluem as seguintes áreas
    • Envio de formulários, navegação por abas, navegação por URLs javascript:
    • Cabeçalho Refresh e ``
    • line-break: anywhere, Location.assign()
    • crypto.subtle.deriveBits(), getComputedStyle(), performance.measure()
    • FileReader.readAsDataURL(), Blob.stream()
    • ML-KEM em SubtleCrypto
  • No lado de WebGPU, foram melhorados GPUSupportedLimits, GPUTexture, GPUDevice.createBindGroup() e outros recursos de WebGPU
  • As correções de bugs incluem `` e Content-Security-Policy, :active, :hover, align-items, border-image-outset, padding em overflow: scroll, evento pointerup, evento slotchange, import() dinâmico, CanvasRenderingContext2D.clip() e outros

Melhorias de desempenho: menos percursos de layout e processamento adiado

  • Foi criada uma ferramenta para encontrar alocações não rastreadas, visando melhorias em about:memory
  • Os pools de threads do cache de imagens, Web Storage e IndexedDB foram unificados, reduzindo o número de threads do SO necessárias por CPU
  • As otimizações de layout se concentram em reduzir custos de percurso e cache da fragment tree
    • A fragment tree se tornou majoritariamente imutável, eliminando em muitos acessos o custo em runtime de borrow de AtomicRefCell
    • O cálculo de containing block e a construção da stacking context tree foram combinados, na maioria dos casos, em um único percurso da fragment tree
    • O cálculo de scrollable overflow passou a ser lazy e incremental, praticamente eliminando o percurso completo da fragment tree
    • O cache de fragments, resultados de shaping e outros resultados de layout entre reflows foi melhorado
    • A precisão do incremental fragment layout aumentou
    • O uso de memória no text shaping foi reduzido
  • O processamento de atributos DOM também ficou mais eficiente
    • Quando um script escreve valores de atributos, a serialização é evitada até que eles sejam lidos novamente, e escritas frequentes em inline style ficaram até 25% mais rápidas
    • Durante parsing de HTML ou leituras internas de atributos, a criação de nós Attr é evitada até que o script realmente precise deles, reduzindo o uso de memória e a possibilidade de garbage collection
  • Foi removido o comportamento de percorrer toda a DOM tree sempre que era anexado à árvore, o que é perceptível ao analisar documentos com muitas tags
  • O stylesheet lock usa AtomicRefCell, mais eficiente que parking_lot::RwLock
  • No OpenHarmony, foi adicionado um refresh driver real, reduzindo o uso de CPU em idle, e a lista de fontes é armazenada em cache no disco, acelerando a inicialização
  • Para melhorar o tempo de build, mais código foi separado do enorme script crate, e o tamanho da árvore de dependências também foi reduzido

Correções de estabilidade e uso do sistema de tipos

  • Vários crashes e hangs foram corrigidos
    • content, MediaStream, Element.attributes.item(), CSSKeyframesRule.appendRule(), FocusEvent.initEvent(), Window.stop()
    • document.execCommand("delete")
    • build com --debug-mozjs
    • Avaliação de scripts pausados no DevTools
    • Pré-visualização de alguns valores JS no DevTools
    • Shaping de zero-width space no layout
    • Casos em que o modo experimental do servoshell é alternado em runtime
  • Continua o trabalho de longo prazo para usar o sistema de tipos do Rust para tornar impossíveis certas falhas de borrow dinâmico

Contribuidores e status de patrocínio

  • 9 pessoas tiveram seu primeiro patch mesclado no Servo
    • AbdAlRahman Gad, Onyeka Obi, Steve Sharon Sam, avis137, Xabier Rodríguez, June, Matt Van Horn, nicole, panxt8
  • Uma lista de issues adequada para novos contribuidores é oferecida na curated list
  • O patrocínio recorrente está em US$ 7.659 por mês, um aumento de 4,2% em relação a abril
    • Os recursos são usados para CI e servidores de benchmarking, estagiários do Outreachy e suporte ao trabalho de maintainers
  • No thanks.dev, 35 usuários do GitHub que dependem do Servo estão patrocinando o projeto, 2 a mais que em abril
  • O uso dos recursos é decidido por meio do funding request process público do Technical Steering Committee, e propostas ativas são acompanhadas em servo/project#187

1 comentários

 
GN⁺ 3 시간 전
Opiniões no Lobste.rs
  • feliz em ver que o lobste.rs funciona quase perfeitamente no Servo
    o que notei foi que links em negrito não aparecem em negrito, a fonte parece um pouco estranha (parece Fira Sans), os campos de entrada na página de login são finos demais e, ao clicar neste campo de texto, o cursor fica em uma posição diferente da que foi clicada
    como disseram nos comentários que a engine de JavaScript é a mesma do Firefox, no geral parece estar funcionando como esperado
    edição: ao ativar as configurações experimentais, o problema do negrito foi resolvido
  • o Servo já está em desenvolvimento há anos; afinal, qual é o sentido dele?
    • o Servo foi um projeto experimental iniciado pela Mozilla para criar um novo navegador em Rust
      um dos principais objetivos era o Microsoft HoloLens, mas no fim o grande projeto foi interrompido, e alguns componentes entraram no Firefox
      por exemplo, a engine de CSS era um deles, já que era difícil escrevê-la em C++ por causa de suas características multithread
      depois a Igalia assumiu e se tornou a nova mantenedora, tentando reviver o projeto e transformá-lo em um novo concorrente
      a engine de JavaScript é a mesma do Firefox
    • o projeto começou em 2012, mas, pelo que sei, o desenvolvimento ficou parado por alguns anos e só recentemente voltou a acelerar
      o objetivo é ter uma alternativa às principais engines de navegador, especialmente para aumentar a concorrência com a Blink, a engine do Chrome
    • implementar uma engine de navegador em uma linguagem com segurança de memória, que permita aproveitar mais facilmente o paralelismo e a concorrência suportados pelo hardware atual, continua sendo uma grande vantagem, assim como era quando o projeto começou
      também é importante ter uma implementação separada da plataforma web, livre da influência das grandes empresas de tecnologia
      o Google hoje tem poder demais, e a Mozilla vem mostrando um desempenho quase desastroso há anos
      por isso, pelo menos eu, faço uma doação de alguns dólares por mês