O Paradoxo do Navio de Teseu no mundo open source.

O Paradoxo do Navio de Teseu

O Paradoxo do Navio de Teseu no mundo open source.

 Este artigo é parte integrante de um livro sobre licenças de software livre e de código aberto que estou escrevendo (e que honestamente ainda não há previsão de lançamento). Mas o que me motivou a disponibilizar esta parte foram dois motivos. O primeiro foi que recentemente eu postei o artigo o envolvimento do Netfilter/Iptables em ações judiciais. O segundo foi durante a live sobre o projeto Pindorama Copa Cabana onde um dos pontos que abordamos foi sobre forks pois há alguns comandos no pacote Util-Linux que são forks de comandos do Core utils do GNU. E é aí que eu hoje resolvi bancar de filósofo sem formalidades e entro com O paradoxo do Navio de Teseu para que possamos analisar e melhor entender sobre código fonte e forks*. 

O NAVIO DE TESEU

 Teseu é aquele maluco da mitologia grega que enfrentou o Minotauro (o maluco é bravo mesmo).  Mas o que nos interessa aqui é sobre o paradoxo criado em torno dele. Em Vidas Paralelas, Plutarco propõe que se Teseu partiu com seu navio em uma viagem (que durou uns 50 anos) e ao longo dessa viagem seu navio precisou de manutenção (é obvio) ao ponto que ao final da viagem, todas as peças originais haviam sido substituídas, surge a questão:
Trata-se do mesmo navio ou de outro?
 E esse paradoxo virou uma bagunça; Heráclito e Aristóteles afirmaram que sim, aí vem Gottfried Leibniz afirmou que não; Thomas Hobbes piora ainda mais o assunto propondo que se remontassem o navio com as peças originais (por que alguém iria querer montar a porcaria de um navio com as peças velhas? Alias, quem seria desocupado o suficiente para ficar procurando estas peças?) se ambos os navios são o mesmo ou se são navios diferentes (aí que bugou a cabeça de todo mundo mesmo); John Locke já mete o bicão falando de meia furada (a conversa mais paralela que eu já ouvi) e o assunto foi tão longe que teve gente até mesmo falando de teletransporte...

 Esse paradoxo foi tema no ultimo capítulo da série Wanda Vision quando ambos Visões (a versão projetada por Wanda e o branco que foi reconstruído a partir do corpo original do Visão) lutavam entre si. O versão branca de Visão foi programada para destruir o Visão porém, ele é o visão; o original. Daí surge o debate entre os dois sobre o navio de Teseu e ambos chegam a conclusão de que os dois são o Visão (ou talvez não, sei lá. Assunto que vira uma bagunça na mente).

Vision vs Vision
Visão vs Visão em Wanda Vision.

 Bom, deixando essa balela filosófica de lado porque eu não tenho um pingo de interesse em falar de meia furada; vamos aproveitar a ideia do navio e substituir por código fonte.

 Então suponha que você seja o autor de um programa open source*; porém alguém cria um fork do seu programa e ao longo do tempo o código fonte foi tão modificado ao ponto que não há mais uma só linha do seu código original. E agora faço a mesma pergunta do navio:
Trata-se do mesmo programa ou de outro?
 Bom de acordo com a lei, quando um programa é totalmente modificado, não se trata mais do mesmo programa. Não há como reivindicar direito sobre o código fonte de outras pessoas.

 Externamente enxergamos o mesmo programa com funcionalidades semelhantes porém, internamente ambos são programas totalmente diferentes. Para entender melhor, vamos analisar dois projetos que passaram por situações semelhantes ao longo de sua história. São eles o 4.4BSD-LITE e o Busybox.

O CASO 4.4BSD-LIT vs USL

 Como já contei em uma live, a BSDI (Berkeley Software Design, Inc) tomou um processo da AT&T simplesmente por seu número de telefone conter a palavra Unix...1-800-ITS-UNIX. Pois é, um simples numero de telefone foi motivo o suficiente para a BSDI tomar um processo da AT&T que se estendeu por um bom tempo (em partes por culpa da própria galera do BSD).


 Só se chegou a alguma solução quando removeram certos arquivos e modificaram outros e assim surgiu o 4.4BSD. Em Julho de 1.994 foi lançado o 4.4 BSD-Lite não contendo nenhuma linha de código fonte AT&T (o 4.4BSDLite que deu origem aos BSDs que conhecemos hoje).


 Ou seja, com a remoção de todo código da AT&T, os BSDs continuam sendo Unix porém,  não mais o Unix da AT&T, Bell Labs, USL, Open Groups ou seja lá quem for. Não há como reivindicar direitos sobre os BSDs por não conter mais código fonte de autoria dessas instituições. No caso eles se tornaram outro Unix; Unix independente do original.

Busybox e o caso GPLv3

 O autor do Busybox é Bruce Perens; primeiro presidente a assumir o Debian após a saída de Ian Murdock. Bruce Perens é também o responsável pelo logo e pela ideia de codinomes do Debian serem inspirados na animação Toy story.

 Bruce desenvolveu o Busybox a partir de comandos já existentes, originados de outros pacotes como o Core utils do GNU e o Util-linux do... Linux.... A ideia era desenvolver uma ferramenta (um terminal de comandos) tendo somente os comandos necessários para que o kernel Linux pudesse utiliza-lo durante o processo de boot. Tanto que encontramos o Busybox dentro do initrd ou do initramfs.


 Porém, Bruce Perens deixou o projeto Busybox antes que ficasse pronto sendo então assumido por outros como Erik Andersen. Erik Andersen foi quem tornou o Busybox funcional para que pudesse ser utilizado como terminal de comandos padrão (assim como vemos no Alpine Linux e em muito roteadores). Após Erik Andersen, quem assumiu o projeto como mantenedor foi Rob Landley (o autor do terminal de comando toybox que é encontrado no Android desde a versão 7, no Tizen e em vários outros projetos).

 10 anos depois que o projeto se encontrava consolidado, com ferramentas funcionais e todos os problemas judiciais solucionados, eis que Bruce Perens surge de volta ao projeto como um herói (e até levando créditos pelos trabalhos de outras pessoas) e começa a querer ditar regras. Uma delas é que o Busybox deveria ser migrado para a licença GPLv3.

 Um dos motivos apresentados a Bruce Perens para que não ocorresse tal migração de licença foi que já não havia mais código do projeto GNU no Busybox. Então não haveria como fazer tal exigência.

BusyBox is not a GNU project, so the Free Software Foundation does not hold its copyrights; instead, those copyrights are retained by the original authors. As Rob looked over the code, he found many contributions with the usual "or any later version" language which would allow a change to GPLv3. Others, however, had the explicit "version 2 only" language. Some, contributed by one Linus Torvalds, state that they "may be redistributed as per the Linux copyright." Some other contributions carry a BSD license - originally with the GPL-incompatible advertising clause. It was quite the mixture of licenses.
Passe o cursor na imagem para ler a tradução (texto original clicando aqui)

 Um dos argumentos apresentados por Brunce Perens foi que ele era o autor do projeto e eles iriam fazer o que Richard Stallman mandasse.... Foram 9 meses de debate sobre o assunto que não levou a lugar nenhum. Houve até mesmo consulta de advogados (da qual Bruce Perens não compareceu).

 Rob landley chegou a passar dias analisando e comparando o código entre versões do Busybox para provar que existia mais códigos de Bruce Perens presente no projeto. A equipe do Busybox Sugeriu que Bruce perens fizesse um fork de qualquer versão do projeto para que atendesse às suas necessidade e Bruce até mencionou que faria porém... No final das contas, o BusyBox permanece até hoje sob GPLv2 e... Cadê o fork do Bruce Perens?

Conclusão

 As regras apresentadas aqui não são exclusivas a forks ou a software livre e de código aberto. Elas também são aplicáveis tanto ao próprio projeto ou até mesmo software proprietário. Você pode ter por exemplo um programa e modificá-lo por completo que ele também deixará de ser o mesmo programa.

 Como exemplo, reparem as duas imagens abaixo. tratam-se do código fonte do comando fsck. A primeira apresentada é do código de autoria do Linus Torvalds de 1991 e 1992 (quando foi lançada a versão 0.11 do kernel) e está disponível no util-linux-ng-2.13.0.1. Já a segunda está disponível no util-linux-2.38-rc1 e possui seu código totalmente modificado por Ted T'so, Karel Zak e outras pessoas. 

Fsck de autoria de Linus Torvalds no util-linux-ng-2.13.0.1
Fsck de autoria de Linus Torvalds no util-linux-ng-2.13.0.1

util-linux-2.38-rc1
O mesmo fsck do util-linux-2.38-rc1

 Mas mesmo que um programa tenha dado origem a outro, ambos são considerados programas diferentes se totalmente modificado (ambos possuem a mesma origem, o mesmo propósito, funcionalidades iguais, mas são programas diferentes), não tendo ao autor do original créditos e direitos sobre o posterior; esse é o foco principal deste assunto; tratar da questão de direitos autorais sobre o código fonte (sim, software livre e de código aberto também acabam agregando direitos autorais a seus autores). Os créditos são sempre reservados a cada um que realizou alguma contribuição (todos são autores e todos merecem seu reconhecimento).

 Mas se me perguntarem sobre o navio; se trata-se do mesmo ou de outro. Para mim trata-se de um navio pow... Vai entender o que passa na cabeça dos seres humanos. Não é a toa que ficar buscando inteligência fora da terra...
Busy busy busybox

Comente com o Facebook:

Nenhum comentário:

Postar um comentário

Viu algum erro e quer compartilhar seu conhecimento? então comente aí.

Observação: somente um membro deste blog pode postar um comentário.

Marcadores

A pior história sobre Linux que já ouvi (5) A.I (1) ambiente gráfico (19) AMD (14) analise (10) Andriod (16) android (7) Apple (1) arm (4) artigo (5) aws (1) bc (23) benchmark (6) BetrFS (1) blackhat (1) BSDs (29) btrfs (32) bugs (2) Caixa de Ferramentas do UNIX (19) canto do Diego Lins (2) certificações Linux (7) Código Fonte (54) comandos (31) comp (1) compressores (5) container (7) CPU (19) cracker (1) criptografia (5) crowdfunding (9) cursos (24) daemons (13) Debian (31) desempenho (1) desenvolvimento (90) desktop (19) DevOps (3) DevSecOps (4) dic (1) Dica de leitura (90) dica DLins (2) dicas do Flávio (27) Dicas TechWarn (1) diet libc (3) diocast (1) dioliunx (3) distribuições Linux (14) Docker (12) DragonflyBSD (22) driver (1) ead Diolinux (2) edição de vídeo (5) embarcados (1) EMMI Linux (4) emuladores (9) endless (5) English interview (3) Enless OS (2) entrevista (17) espaço aberto (82) evento (6) facebook (1) Fedora (10) filesystem (82) financiamento coletivo (2) fork (4) fox n forests (4) FreeBSD (20) Funtoo Linux (13) games (93) gerenciadores de pacotes (4) glaucus (3) GOG (3) google (8) gpu (3) hacker (2) hardware (104) hash (1) helenos (3) I.A (1) init system (10) Intel (15) inteligencia artificial (1) IoT (1) ispconfig (1) jogos (37) kde (1) kernel (138) lançamento (64) leis (1) LFCS (1) libs (2) licenças (8) Linus (16) linus torvalds (2) Linux (194) linux foundation (3) linux para leigos (1) live (5) LPI (8) LTS (1) Mac (1) machine learning (1) matemática (9) mesa redonda (27) microcontroladores (1) microsoft (6) microst (1) muito além do GNU (162) musl (3) não viva de boatos (9) navegadores (5) NetBSD (7) newlib (1) nim (1) nintendo (1) novatec (17) novidades (1) nuvem (1) o meu ambiente de trabalho (3) off-topic (12) open source (84) OpenBSD (6) OpenShift (1) oracle (1) os vários sabores de Linux (43) padrim (2) palestras e eventos (5) partições (6) pentest (8) performance (1) pipewire (1) plan9 (1) playstation (1) processadores (30) professor Augusto Manzano (11) Programação (64) promoção (1) propagandas com Linux (8) ps4 (1) real-time. (1) Red Hat (23) redes (4) resenha nerd (4) Resumo da Semana do Dlins (2) resumo do Tux (19) retrospectiva Linux (1) risc-V (14) RISCV (13) rtos (1) runlevel (2) rust (12) segurança digital (24) servidor web (1) servidores (2) shell (8) shell script (7) sistema operacional (25) smartphones (3) Software livre e de código aberto (151) sorteio (3) Steam (10) Steam no Linux (8) supercomputadores (4) suse (6) systemd (7) terminal (88) terminal de comandos (17) toca do tux (1) toybox (26) tutorial (6) Tux (3) unboxing (7) UNIX (17) UNIX Toolbox (14) vartroy (1) vga (1) virtualização (2) vulnerabilidade (6) wayland (5) web (1) whatsapp (1) whitehat (1) Windows Subsystem for Linux (2) wine (14) WoT (1) yash (1) ZFS (15) zsh (3)