Apresentação Final de Contribuição Open-Source

Projeto Ladybird Browser

Guilherme Mendesnº 107332
Leonardo Nevesnº 110597
PIC · Contribuição para Software Open-Source  ·  ladybird.org
Contexto

O que é o Ladybird?

Um motor de navegador web independente, construído de raiz — e a razão pela qual escolhemos este projeto.

Web Browser Independente

Não é um fork de Blink, WebKit ou Gecko. É uma alternativa verdadeiramente livre, guiada pelos standards da web e focada no utilizador.

Sem fins lucrativos

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.

Construído do Zero

Todo o motor de renderização, desde o parsing de HTML e CSS até ao interpretador de JavaScript, está a ser desenvolvido de raiz.

1M+
linhas de código
C++ → Rust
port incremental
Alpha 2026
Linux & macOS
100%
donativos & patrocínios
01
01 · Escolha do Projeto

Porquê o Ladybird?

Tecnicamente desafiante
Utilizado em larga escala
02
02 · Primeiros Bugs

Primeiras Contribuições

A primeira fase envolveu a resolução individual de pequenos bugs.

● Closed
Bug 1 — Leonardo Neves

À 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.

✓ PR Merged
Bug 2 — Guilherme Mendes

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.

03
03 · A Funcionalidade

O que foi Implementado

Implementar a Interação do Utilizador com Imagens com usemap + Cálculo de intersecções geométricas para áreas rect, circle e poly.

Implementamos o algoritmo nativamente em C++ (LibWeb) — fiel ao plano inicial.
<!-- mapa de imagem clicável -->
<img src="mapa.png" usemap="#areas">

<map name="areas">
  <area shape="rect"   coords="0,0,82,82">
  <area shape="circle" coords="60,60,30">
  <area shape="poly"   coords="10,8,90,4,…">
</map>
03
03 · Implementação

O pipeline nativo em C++

Da árvore DOM ao clique do utilizador, em três etapas.

1
Parsing

Durante a construção da árvore DOM, o motor analisa e guarda as strings das coordenadas fornecidas pelo HTML.

2
Hit-Testing

Posição do Cursor é calculada constantemente para determinar colisões com áreas.

3
Event Pipeline

Onde as funções de interação são chamadas após um trigger.

Intercetamos alguns pontos críticos da interação — mousedown, mousemove, mouseup… — para redirecionar para outra página, mudar o cursor ou mostrar o link no canto, conforme a ação (clicar, passar o rato, scroll).
03 · Geometria

Como funciona o hit-testing

Três formas, três algoritmos de colisão — calculados em C++.

min max
rect

Validação simples de limites — min / max bounds.

r d
circle

Distância Euclidiana do centro vs. raio  (d ≤ r).

raio
poly

Algoritmo de Ray-Casting  (regra even-odd).

04
04 · Esforço & Código

Estimativas vs. Realidade

Estimativa Realidade
Código no motor linhas
~300
~200
Testes linhas
~150
~50
Esforço por pessoa horas
~50h
~30h
Porquê menos código?

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

05
05 · Desafio & Lições

O maior desafio

Navegar uma codebase massiva

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++.

O que aprendemos

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.

06
06 · 07 · Comunidade & Documentação

A experiência com o projeto

Comunidade Open-Source

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.

Documentação

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.

08
08 · Conclusão

Declarações Oficiais

Recentemente, os mantainers do browser decidiram fechar permanentemente o acesso a contribuições públicas e a possibilidade de abrir PR's 💀
Criticas da Comunidade

Esta decisão não foi bem recebida pela comunidade, porque centenas de voluntários frequentes ficaram impedidos de contribuir.

O que se Segue

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

09
09 · Demonstração Live

A funcionalidade no Ladybird

Implementação nativa: clica no canto superior esquerdo da imagem.

<img src="lb.jpg" usemap="#demomap">

<map name="demomap">
  <!-- Área invisível: topo-esquerdo -->
  <area shape="rect"
        coords="0,0,200,200"
        href="obrigado.html">
</map>
Ladybird Finalizar Apresentação