Servidor HTTP - Parte 6

Hello, World!

Enzo Soares

Publicado em 16 de Abril de 2025 às 13:38

Saudações!

Esse projeto chegou num ponto em que eu estou confortável em publicá-lo para o mundo. Para isso, preciso fazer três passos:

  1. Escolher uma licença
  2. Empacotar o projeto
  3. Criar um README.MD

Vamos lá!

Escolhendo a licença

As licenças de software livre e de código aberto podem ser divididas principalmente em dois tipos: copyleft e permissivas. A principal diferença entre elas está nas restrições que impõem sobre a redistribuição e modificação do software.

Licenças Copyleft (Restritivas ou Recíprocas)

🔹 Princípio: Se você modificar ou distribuir o software, deve manter a mesma licença (ou compatível) no código derivado.

🔹 Objetivo: Garantir que as versões modificadas permaneçam livres e abertas.

🔹 Exemplos:

GPL (GNU General Public License) – Versões 2 e 3 (a mais forte, exige que o software completo seja aberto se distribuído).

AGPL (GNU Affero GPL) – Similar à GPL, mas aplica-se também a software executado em servidores (SaaS).

LGPL (GNU Lesser GPL) – Mais permissiva para bibliotecas, permitindo ligação com software proprietário.

✅ Vantagens:

Preserva a liberdade do software.

Evita o "aproveitamento proprietário" (empresas não podem fechar o código).

❌ Desvantagens:

Pode ser restritiva para uso comercial.

Incompatível com algumas licenças permissivas.

Licenças Permissivas (Não-Copyleft)

🔹 Princípio: Permitem uso, modificação e redistribuição sem exigir que o código derivado mantenha a mesma licença. 🔹 Objetivo: Maximizar a adoção do software, permitindo até mesmo integração com código fechado. 🔹 Exemplos:

MIT License – Muito simples, só exige atribuição.

Apache License 2.0 – Similar ao MIT, mas com cláusulas explícitas sobre patentes.

BSD License (2 e 3 cláusulas) – Permissiva, com exigência mínima de crédito.

✅ Vantagens:

Flexibilidade para uso comercial e proprietário.

Compatível com quase todas as outras licenças.

❌ Desvantagens:

Não impede que empresas fechem versões modificadas.

Pensando que esse é um projeto de código aberto que eu espero que seja usado por algumas pessoas, faz muito mais sentido usar uma licença permissiva. Dessas, a mais interessante é a do MIT, que permite uso irrestrito do meu software, sem garantia e com atribuição de direitos autorais.

Empacotando um projeto

Para empacotar o projeto, temos que gerar um módulo além de um executável:

{
    const module = b.addModule("azig", .{
        .root_source_file = b.path("src/azig.zig"),
        .target = target,
        .optimize = optimize,
    });
    module.linkLibrary(libuv_dep.artifact("uv"));
    module.linkSystemLibrary("ucrtbased", .{});
}

E é só! Algum projeto que quiser utilizar do código de azig precisa incluir as seguintes linhas no seu build.zig:

const azig = b.dependency("azig", .{
    .target = target,
    .optimize = optimize,
}).module("azig");
exe.root_module.addImport("azig", azig);

Escrevendo um README

Essa parte é simples: escrever um README que explique o que é o projeto e como utilizá-lo. Não tem muito sentido falar sobre isso aqui, além de te mostrar o resultado final. Aproveite!