- O Servo recebeu um subsídio da NLnet em julho de 2023 para reforçar recursos centrais de layout como uma alternativa leve e de alto desempenho para incorporar tecnologias web em aplicações
- O escopo das melhorias se concentra em completar o suporte a CSS float, ampliar o suporte multilíngue no layout inline e adicionar suporte inicial a
<table> - O trabalho em CSS float vem continuando desde meados de 2023, e a meta é elevar a taxa média de aprovação nos testes WPT relacionados para mais de 80%
- No layout inline, ainda faltam suporte à seleção de fontes necessária para renderização de caracteres não latinos, escrita da direita para a esquerda e propriedades lógicas
- Como a falta de suporte a table no novo mecanismo de layout quebra a exibição de muitas páginas web, a meta prática inicial passou a ser a renderização de tabelas da Wikipedia
Áreas do Servo reforçadas com o subsídio da NLnet
- O Servo recebeu um subsídio da NLnet em julho de 2023 para melhorar vários recursos relacionados a layout
- Os principais objetivos se resumem em três pontos
- Completar o suporte a float no Servo
- Ampliar o suporte a mais idiomas no layout inline
- Adicionar suporte inicial a
<table>
Metas e andamento por recurso de layout
-
Floats
- O suporte a float no Servo está em desenvolvimento desde meados de 2023
- Ainda restam problemas a resolver antes de considerá-lo uma implementação totalmente compatível com CSS float
- A meta é obter uma taxa de aprovação no WPT acima de 80% em média para
/css/CSS2/floats/e/css/CSS2/floats-clear/ - Os resultados podem ser acompanhados no WPT dashboard
- Na semana passada, os testes de
/css/CSS2/floats/superaram a meta com 82.2% de aprovação /css/CSS2/floats-clear/está atualmente em 73.3% de aprovação, aproximando-se da meta
-
Mais idiomas no layout inline
- O mecanismo de layout do Servo ainda carece de recursos essenciais para renderizar idiomas que não usam o alfabeto latino
- Entre os pontos a serem reforçados estão a seleção correta de fontes, suporte a escrita da direita para a esquerda e propriedades lógicas
- O objetivo é ampliar o alcance de suporte do layout inline para que o Servo consiga exibir conteúdos mais diversos
-
Suporte inicial a
<table>- Tabelas HTML são um recurso web importante e amplamente utilizado
- O novo mecanismo de layout do Servo ainda não oferece suporte a table, o que faz com que o layout de muitas páginas web não seja exibido corretamente
- A prioridade inicial do suporte a table é permitir a renderização das tabelas usadas na Wikipedia
- À medida que cada marco avançar e for concluído, os próximos posts do blog trarão mais detalhes
1 comentários
Comentários do Hacker News
Estou bem animado com o Servo e acho difícil acreditar que a Mozilla não tenha dado atenção a ele
A ideia de um motor com ótima segurança e desempenho já é boa, mas o que eu gosto especialmente é o fato de que o motor web pode ser usado como componente
Na época do Windows 9x, o IE tinha controles ActiveX, então dava para embutir um motor web em qualquer lugar, e o KHTML era parecido, mas hoje em dia nem o Firefox nem o Chrome parecem interessados nesse tipo de uso
Ainda bem que existe o Qt WebEngine, mas pelo que entendo a relação é meio complicada porque o lado do Chrome não liga para esse caso de uso
Além disso, o Chrome é coisa do Google, e pela minha experiência as coisas do Google vivem no próprio mundinho delas, então compilar e integrar é um saco
Por isso estou muito animado com uma alternativa prática que eu possa colocar no código, resolvendo as preocupações de segurança e reduzindo a dor da integração
A Mozilla financiou o projeto como pesquisa e percebeu que seria preciso muito mais dinheiro e tempo para levá-lo totalmente ao mercado, então ficou mais para uma decisão de cortar custos
Dito isso, existe o problema de terem distribuído esse dinheiro para executivos e outros de uma forma que não combinava com a moralidade que defendiam
Pelos posts de blog, a Mozilla integrou ao Firefox as partes que podia aproveitar do Servo, então de certa forma acabou extraindo valor do projeto
Acho que, se alguém tivesse dado à Mozilla muito dinheiro e prazo ilimitado, eles teriam concluído o Servo
Só que, assim que o CEF ficou popular, o Google investiu muitos recursos para bloquear login do Google no CEF e em outros navegadores embutidos[0]
Por causa disso tive que abandonar um navegador baseado em CEF, e esse tipo de prática de negócio é nojenta, mas não havia muito o que fazer
Se o meu navegador não consegue fazer login em produtos do Google, fica difícil ele ser amplamente usado, e eu também não tenho tempo para entrar num jogo de gato e rato com os métodos de detecção do Google
Para que os componentes de navegador embutido virem algo dominante a ponto de qualquer um poder criar um navegador, primeiro é preciso lidar com o problema de grandes empresas bloquearem navegadores embutidos quando eles ganham popularidade
Num cenário ideal, seria ótimo ter um Gecko embutível fora do Android, porque o Firefox é grande demais para ser bloqueado
Já houve muita conversa sobre isso antes, e eu até fiz uma prova de conceito roubando handles de janela[1], mas isso não dá dinheiro
0 - https://developers.googleblog.com/2016/08/modernizing-oauth-...
1 - https://github.com/cretz/ffembedpoc
Não sei exatamente o que você quer dizer, mas eles levaram vários componentes para o Gecko, incluindo WebRender e Stylo
Lembro que, quando o papel de parede falhava, aparecia na área de trabalho uma página de erro do ActiveX com links clicáveis, e aquilo era realmente confuso
No macOS e no Linux ele funciona muito bem
Mesmo assim, precisamos de mais motores web embutíveis
O Gecko é bom, mas o fato de continuar permanentemente preso ao XULRunner acaba atrapalhando
É bom ver o trabalho no Servo continuar depois que a Igalia assumiu
Há muita dívida técnica acumulada por anos de manutenção mínima, mas parece haver progresso de verdade
Pessoalmente, eu gostaria que apostassem forte em modularidade
Parece haver um nicho para um motor de navegador open source focado em possibilidade de embutir, e se surgisse uma biblioteca de “monte seu próprio navegador” em que as pessoas pudessem misturar peças como blocos de Lego para criar um novo motor, isso também poderia ajudar bastante na saúde de longo prazo da plataforma web
Um Electron com Servo embutido ou algo parecido com o Electron poderia trazer bons resultados
O Tauri já ocupa um pouco esse nicho, mas em vez de embutir algo ele usa o que o sistema operacional oferece
Seria bom existir uma opção mais ou menos no meio disso
Por exemplo, o Sciter [1] teve algum sucesso mesmo implementando só um subconjunto razoável das APIs de DOM
Ele não serve muito bem para navegação comum na internet, mas como biblioteca de UI dá para evitar as partes que não funcionam
1: https://sciter.com/
O modelo de componentes e a camada de embedding são estruturados assim
Parte do financiamento deste subsídio vem da European Commission, com apoio via programa NGI
É uma notícia realmente boa para o Servo
A NLNet Foundation tem apoiado muitos projetos excelentes recentemente, então o nome dela aparece bastante
Eu precisava de ajuda para levar adiante alguns problemas, e foi exatamente isso que aconteceu
Estamos principalmente na América do Norte, então é um apoio muito visionário, ainda mais considerando que o dinheiro vem da UE
Outro navegador sendo feito do zero que também vale a pena ver é o Ladybird
Está sendo desenvolvido por um grupo indie meio desorganizado: https://ladybird.dev/
Sinceramente, é um projeto bem raiz
Considerando que ainda é um projeto muito novo, já é bastante impressionante
Só de tirar screenshots já dá para ver que o renderizador do Servo é bem básico, lento e cheio de bugs
É rápido e tudo está sendo feito publicamente, então o trabalho da equipe do Ladybird é muito impressionante
Por algum motivo eu achava que o Servo já tinha sido integrado ao Firefox
Existe alguma forma de renderizar HTML como imagem em Rust sem subir um navegador inteiro?
Não precisa suportar muito HTML nem CSS
https://blog.nightly.mozilla.org/2017/07/25/stylo-is-ready-f...
Talvez haja outras coisas também
Mas há duas diferenças: ele suporta apenas Markdown, não HTML arbitrário, e renderiza na tela, não como imagem
Ainda assim, é um bom ponto de partida
Acho que o principal gargalo da renderização web em Rust hoje é um layout de texto melhor, especialmente suporte para colocar conteúdo não textual dentro do texto, como
display: inline-blockQuando isso estiver implementado, acho que será possível fazer uma renderização básica de páginas web de forma bem razoável
Eles são, respectivamente, o compositor baseado em GPU e o motor de CSS
O Servo é um motor de renderização web escrito em Rust com suporte a WebGL e WebGPU, e pode ser adaptado para aplicações desktop, mobile e embarcadas
É um motor de renderização web embutível e independente, com segurança de memória, modularidade e paralelismo
O que é o Legacy Layout usado como comparação?
É uma iteração anterior do Servo?
Parece que parte do código ainda é usada nos dois lados, e as curvas às vezes sobem e descem ao mesmo tempo, mas nem sempre
Depois, ao implementar partes da especificação CSS, começaram o segundo sistema, o Layout 2020, para resolver problemas que não se encaixavam de forma limpa na arquitetura do Layout 2013
Este ano houve um bom relatório no wiki do Servo, escrito por pessoal da Igalia, resumindo as diferenças entre os dois sistemas e por que decidiram seguir com o Layout 2020
https://github.com/servo/servo/wiki/Servo-Layout-Engines-Rep...