Atualização de maio do Servo: scripts de usuário, compatibilidade com mp4, blackboxing no DevTools e mais
(servo.org)- 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 ``
- Recursos de fontes CSS:
- As APIs DOM também cresceram em várias áreas de padrões
- A propriedade
onslotchangefoi adicionada a ShadowRoot screenLeftescreenTopforam adicionados a Windownew Blob()agora oferece suporte a{endings: "native"}new PerformanceMark()foi adicionadoparseHTML()foi adicionado a DocumentreadAsBinaryString()foi adicionado a FileReaderperformance.measure()agora oferece suporte aos valores de marcaçãoredirectStart,redirectEnd,secureConnectionStarteresponseEnd
- A propriedade
- 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,subscripteremoveFormat - O comando
insertParagraphtem suporte parcial
- Esta versão oferece suporte aos comandos
- O trabalho na Sanitizer API continua sob
--pref dom_sanitizer_enabled- Ela é ativada no modo experimental do servoshell
- Foram adicionados
setComments(),setDataAttributes(),allowProcessingInstruction(),removeProcessingInstruction()eremoveUnsafe()deSanitizer
- IndexedDB segue sendo melhorado sob
--pref dom_indexeddb_enabled, e a conformidade deIDBTransaction.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
SharedWorkeroferece suporte anew SharedWorker()sob--pref dom_sharedworker_enabledServiceWorkerrecebeu 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_cookieseset_cookie_for_urlpassam a receber um argumento adicionalcallback, permitindo chamadas assíncronas- Para manter chamadas síncronas, passe
Noneemcallback set_cookie_for_url_asyncfoi removido e deve ser substituído pelo formatoset_cookie_for_url(Some(Box::new(callback)))
- Na API Preferences, os nomes das configurações de pools de threads foram organizados
threadpools_image_cache_workers_max,threadpools_indexeddb_workers_maxethreadpools_webstorage_workers_maxforam substituídos pelothread_pool_workers_maxunificadothreadpools_fallback_worker_numfoi renomeado parathread_pool_fallback_workersthreadpools_async_runtime_workers_maxfoi renomeado parathread_pool_async_runtime_workers_maxthreadpools_webrender_workers_maxfoi renomeado parathread_pool_webrender_workers_max
- A API DiagnosticsLogging também foi retrabalhada
- Configure opções com
toggle_optione verifique se estão ativadas comis_enabled - Cada opção é uma variante do novo tipo
DiagnosticsLoggingOption - Os campos
pubpor opção deDiagnosticsLoggingforam removidos, e a escrita e leitura de campos devem ser substituídas portoggle_optioneis_enabled, respectivamente extend_from_stringnão aceita mais a opçãohelp, e essa implementação foi movida para o servoshell
- Configure opções com
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 ambienteHOST_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 vellotambé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 ``
- Os alvos são
- CryptoKey passou a ser serializável, podendo ser usado em
structuredClone()epostMessage() - 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
Refreshe `` line-break: anywhere,Location.assign()crypto.subtle.deriveBits(),getComputedStyle(),performance.measure()FileReader.readAsDataURL(),Blob.stream()- ML-KEM em
SubtleCrypto
- Envio de formulários, navegação por abas, navegação por URLs
- 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,paddingemoverflow: scroll, eventopointerup, eventoslotchange,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
- A fragment tree se tornou majoritariamente imutável, eliminando em muitos acessos o custo em runtime de borrow de
- 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
Opiniões no Lobste.rs
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
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 objetivo é ter uma alternativa às principais engines de navegador, especialmente para aumentar a concorrência com a Blink, a engine do Chrome
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