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:
Vamos lá!
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.
🔹 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.
🔹 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.
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);
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!