Um motor de navegador web independente, construído de raiz — e a razão pela qual escolhemos este projeto.
Não é um fork de Blink, WebKit ou Gecko. É uma alternativa verdadeiramente livre, guiada pelos standards da web e focada no utilizador.
Sem acordos com motores de busca, anúncios ou recolha de dados. Mantido por uma organização 501(c)(3), livre de qualquer agenda comercial.
Todo o motor de renderização, desde o parsing de HTML e CSS até ao interpretador de JavaScript, está a ser desenvolvido de raiz.
Tecnicamente desafiante
Utilizado em larga escala
A primeira fase envolveu a resolução individual de pequenos bugs.
À primeira vista, simples de resolver: Botões coloridos do HTML não eram preenchidos. Aṕos a review de um maintainer principal, ficou claro que o problema era bastante mais complexo.
Um excelente primeiro bug: o browser fazia crash ao abrir um HTML que continha apenas uma tag <br>. A solução foi adicionar condições de segurança contra o acesso a memória nula.
Implementar a Interação do Utilizador com Imagens com usemap + Cálculo de intersecções geométricas para áreas rect, circle e poly.
Da árvore DOM ao clique do utilizador, em três etapas.
Durante a construção da árvore DOM, o motor analisa e guarda as strings das coordenadas fornecidas pelo HTML.
Posição do Cursor é calculada constantemente para determinar colisões com áreas.
Onde as funções de interação são chamadas após um trigger.
Três formas, três algoritmos de colisão — calculados em C++.
Validação simples de limites — min / max bounds.
Distância Euclidiana do centro vs. raio (d ≤ r).
Algoritmo de Ray-Casting (regra even-odd).
Reutilizámos o motor de navegação já existente do Ladybird — o design final ficou muito conciso.
O esforço (horas) foi gasto sobretudo a explorar e ler o código
Mais de 1 milhão de linhas e nenhuma experiência prévia com a arquitetura interna de um browser. Descobrir onde implementar a funcionalidade consumiu grande parte do tempo — passámos muito mais tempo a ler, rastrear nodes e fazer debug do que a escrever C++.
Conhecimento prático de como os browsers funcionam: o ciclo de vida do carregamento de uma página — o parsing do HTML em DOM Trees, a geração recursiva da Paint Tree, e a infraestrutura gigante por trás de um simples clique ou movimento do rato.
Fomos tratados com respeito e profissionalismo. As revisões de código foram construtivas — não há rigorosamente nada de negativo a apontar no tratamento que recebemos.
Muito boa. O guião para novos contribuidores está extremamente bem delineado. Sem problemas com o build (Ninja/CMake), os testes (TestWeb) ou a formulação dos Pull Requests.
Recentemente, os mantainers do browser decidiram fechar permanentemente o acesso a contribuições públicas e a possibilidade de abrir PR's 💀
Esta decisão não foi bem recebida pela comunidade, porque centenas de voluntários frequentes ficaram impedidos de contribuir.
Até ao momento estávamos a gostar bastante do projeto, e tencionávamos continuar a contribuir. No entanto nestas circunstancias, resta-nos esperar pela versão alpha para testar
Implementação nativa: clica no canto superior esquerdo da imagem.