Quem me conhece sabe que, apesar de usar e promover o uso do Fedora, que é o meu Sistema Operacional favorito, eu também gosto bastante do OpenBSD (que usei de forma quase exclusiva por uns 3 anos, entre 2003 e 2006). Como não curto muito jogar no celular, minha distração digital é ler os commits do OpenBSD lá no MARC.info, e ocasionalmente olhar alguns diffs no FreshBSD, quando a commit message parece particularmente interessante ou divertida.
Desde o fork da OpenSSL, que se tornou a LibReSSL, venho lendo com atenção os commits nessa parte do repositório, e fiquei bem impressionado acompanhando as atividades de limpeza e refatoração do código, correção de bugs, eliminação de arquivos inúteis ou abandonados, opções de compilação de benefício duvidoso e o "estancamento" de muitos memory leaks. Eu já tinha medido de forma bem "crua" e nada científica a extensão do trabalho, medindo o número de arquivos antes e depois da limpeza, e o espaço em disco ocupado pela lib/libssl no meu checkout local do OpenBSD src. Tinha chegado à conclusão de que um terço do código já tinha ido pro /dev/null, mas muita coisa lá não era exatamente código, então sempre ficava aquela sensação de que tinha que achar uma maneira mais apropriada de medir essa limpeza.
Estes dias, lendo um post sobre o Minecraft feito em 500 linhas de Python, me deparei pela primeira vez com o comando "cloc", que calcula as LOCs de um ou mais arquivos fonte. Quando vi o cloc imediatamente lembrei da LibReSSL. Pode não ser perfeito nem exato, mas certamente já é uma aproximação muito melhor do que simplesmente medir o espaço em disco ocupado, hehehe. Obviamente o cloc está empacotado no Fedora, então é só procurar por ele no Softwares, ou abrir um terminal e rodar "sudo yum install cloc".
Aqui está o relatório do cloc no lib/libssl do OpenBSD src, com o checkout do que havia lá no início de abril, antes do fork:
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 911 32917 68531 234548
Perl 166 8455 7874 67187
C/C++ Header 189 5689 14741 32212
make 80 1818 561 15623
Assembly 14 1356 1405 11067
C++ 26 1860 760 4041
Bourne Shell 62 777 702 3411
m4 1 514 0 1585
DOS Batch 33 413 133 1241
Lisp 1 2 19 24
HTML 1 2 2 3
-------------------------------------------------------------------------------
SUM: 1484 53803 94728 370942
-------------------------------------------------------------------------------
No total eram 1484 arquivos fonte (reconhecidos pelo cloc) com um total de 370 KLOCs. Agora vamos ver o mesmo relatório com os fontes mais atuais:
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 674 23730 53766 171050
Perl 116 7275 6966 60669
C/C++ Header 125 4577 11686 25786
Assembly 12 1154 1350 8660
Bourne Shell 19 365 301 1850
m4 1 514 0 1585
make 3 19 4 301
-------------------------------------------------------------------------------
SUM: 950 37634 74073 269901
-------------------------------------------------------------------------------
Uma bela limpeza! Mais de 500 arquivos e 100 KLOCs foram pro /dev/null até agora, e a LibReSSL continua compatível com a OpenSSL, sem quebrar a API e, a princípio, funcionando melhor, com menos bugs e leaks. É interessante ver também, nos commits, que mais gente tem começado a contribuir, o que parece ser um resultado positivo da limpeza e refatoração do código.
Se mais gente entende o código, mais gente sente vontade de contribuir. Obviamente reinventar a roda só por reinventar é uma perda de tempo, porém se o objetivo é chegar numa roda melhor, mais leve e com menos defeitos, certamente vale a pena. Alguns projetos de roda livre "coopetindo" entre si certamente levam a mais Software Livre de qualidade para todos. Boa sorte, LibReSSL!
No comments:
Post a Comment