Inicialmente tanto o Omnitty quanto a ROTE ficavam hospedados na minha própria conta da Rede Linux e só os utilizava na administração da Rede Linux. Alguns amigos meus usavam também, mas todos utilizavam o programa a partir do meu diretório da Rede.
Uma vez que o Omnitty não está atrelado a nenhuma característica específica da Rede Linux, não havia por que não disponibilizá-lo sob a licença GPL para que outras pessoas pudessem testá-lo e contribuir. A ROTE também seguiu a mesma filosofia, com a vantagem de que, sendo uma biblioteca, poderia até ser usada para outros projetos que não o Omnitty.
O processo de solicitação de hospedagem de projetos no SourceForge é relativamente simples; basta abrir uma conta e preencher uma proposta, onde deve-se escolher um nome, descrever um resumo do programa e categorizá-lo de acordo com certos critérios. Em alguns dias úteis a proposta é revisada e, se for aceita, o projeto passa a existir no SourceForge. A partir daí, basta utilizar o acesso CVS, shell e FTP para manipular a conta do projeto no SourceForge.
Um dos atrativos é o fato de que o SourceForge, além de hospedar o CVS dos projetos, fornece um servidor web para a divulgação das home-pages dos projetos. As home pages do Omnitty e ROTE são, respectivamente,
Aqui estão algumas estatísticas de downloads extraídas do SourceForge.
O maior número de downloads da ROTE se explica porque ela é uma biblioteca que é usada em alguns projetos fora o Omnitty, por isso há quem baixe somente a ROTE sem baixar o Omnitty, mas não o contrário, já que aquela é uma dependência deste.
A biblioteca ROTE tem recebido bastante feedback da comunidade porque nenhuma outra biblioteca se propõe a fazer o que a ROTE faz. Naturalmente são poucas as aplicações que necessitam fazer emulação de terminal, mas para essas a ROTE fornece uma funcionalidade bastante útil.
Eis aqui um e-mail recebido de um desenvolvedor italiano que começou um projeto que utiliza a ROTE. Não recebi mais notícias do sucesso do projeto.
From: (não exibido) To: brunotc@gmail.com Date: Feb 20, 2005 12:08PM Subject: ROTE Hello, i visited http://rote.sourceforge.net/ and i liked very much your ROTE library. I'm going to use it in my project: http://developer.berlios.de/projects/psyche/ (is a textmode window/workspace manager scriptable in Scheme, that uses libcaca for rendering). There are not other library doing the same work of ROTE. I only think that changing the licence from LGPL to GPL is much better. (see http://www.gnu.org/philosophy/why-not-lgpl.html) Bye.
Note no final da mensagem alguma reação ao licenciamento da biblioteca, que optei por LGPL ao invés de GPL. A diferença é que a LGPL (Lesser General Public License) permite a utilização da ROTE em programas sem que isto obrigue-os a serem distribuídos sob a uma licença livre. Já a licença GPL torna isso obrigatório. Atualmente exite um movimento no sentido de desencorajar desenvolvedores de utilizar a LGPL, aparentemente porque eles acretitam haver uma guerra entre software livre e software proprietário, e entregar bibliotecas livres sob a LGPL seria o equivalente a fornecer munição ao campo inimigo. Mas como não sou tão tenazmente bélico quanto a essa questão, e a biblioteca ROTE não é nenhuma revolução tecnológica, resolvi que a licença adequada é o LGPL.
Um outro feedback foi do autor do projeto AnyTerm, que enviou a seguinte mensagem:
From: (não exibido) To: brunotc@gmail.com Date: Mar 12, 2005 12:48 PM Dear Bruno, I've just been experimenting with ROTE and I think that I have a use for it. I'm developing a "terminal emulator on a web page" called Anyterm. The idea is to give you shell access to your server from anywhere. People have done this sort of thing before, but they all rely on Java and/or are blocked by firewalls. Anyterm only uses port 80 so it will go through firewalls and uses only Javascript in the browser. For the communication it uses XmlHTTP, and I have an Apache module that receives the XmlHTTP and sends it to a pseudoterminal. The performance is good. There is a web page at http://chezphil.org/anyterm/ and it has just been announced on Freshmeat. So far I have not much more than a "proof of concept" implementation. A missing part is the actual terminal emulation. My original plan was to do this in the Javascript, but vt100 is more complicated than I hoped! So I am considering doing it instead within the Apache module using ROTE.
Esse projeto de fato teve algum futuro e hoje já está em funcionamento no endereço http://anyterm.org.
Há mensagens também de empacotadores da biblioteca, isto é, pessoas encarregadas de pegar o código da biblioteca e montar pacotes para instalação em várias distribuições.
From: (não exibido) To: brunotc@gmail.com Date: Jun 15, 2005 2:17 PM Subject: libROTE and packaging Hi -- I developed an RPM package description for ROTE so that I could more easily integrate into a system for use with 'anyterm'. Here is the SPEC file, I hope you find it useful. It was written for a Fedora Core 3 system.
Este é um e-mail do packager da Debian, que é a distribuição que mais faz exigências quanto ao formato dos programas antes de aceitá-los:
From: (não exibido) To: brunotc@gmail.com Date: Jun 23, 2005 1:22 PM Subject: Request regarding ROTE library Bruno, I am working on packaging your ROTE library for Debian. I have a couple of requests. First, would it be possible for you to modify the library build process to create a librote.a and librote.la for inclusion in the development version of the library package? Second, would it be possible for you to include the information from roteprivate.h used by anyterm [0] in the rote.h header? I ask this becuase it is not possible for the Debian package build system to make roteprivate.h, which is only in the source of rote, available during the build of anyterm. This leaves only a couple of options, none of which are acceptable. Specifically, the anyterm pacakge would need to include a copy of roteprivate.h (which would couple the two packages too tightly), or Phil would need to include a copy of the rote source in anyterm, which misses the point of a library. (...)
É interessante receber esse feedback porque, ao atender aos pedidos, a biblioteca ROTE vai tomando cada vez mais uma forma "padrão" em meio à comunidade do software-livre, o que a torna mais fácil de distribuir e empacotar, e faz com que ela trabalhe mais harmoniosamente com os outros programas nas diversas distribuições.
A maior parte das contribuições vêm na forma de bug reports ou feature requests; algumas vêm com um patch que sugere uma maneira de alterar o código-fonte para corrigir o problema apontado.
Um exemplo de um e-mail com um patch (e que explica o que o patch faz), é o seguinte:
From: (não exibido) To: brunotc@gmail.com Date: May 9, 2005 10:14AM Subject: Re: a few corrections OK, here we go... The attached patch is the result of $ cvs -f diff -u -N rote > rote.diff There are 3 changes: 1. In rote.h I have fixed an obvious typo in the ROTE_ATTR_MOD_BLINK macro. 2. In inject_csi.c I have added support for switching off bold/underline/blink/reverse. 3. In inject.c I have changed put_normal_char so that, after you have written the last character on the line, it doesn't immediately do a newline. Instead it leaves the cursor off the edge of the screen, and does a newline next time that you output a character. This is necessary so that sending a complete line of text followed by a newline doesn't leave a blank line. This seems to work for me, but there could be side-effects that I have not thought about. In particular, client code that looks at the cursor position needs to consider that it could be beyond the edge of the screen.
Este foi um importante bugfix relacionado à emulação de terminal da ROTE, que fazia com que o programa top não rodasse no terminal. O segredo era não fazer o cursor automaticamente pular uma linha quando chegasse no canto direito do terminal, mas deixá-lo lá mesmo esperando o próximo caractere, evitando assim acidentalmente pular duas linhas ao invés de uma. Aparentemente isto é um comportamento comum a quase todos os terminais, mas não se encontra documentado em nenhum lugar específico. Se não fosse por essa contribuição, eu sozinho nunca teria descoberto esse bug.
A comunidade não utiliza patches somente para bugfixes. Também enviam sugestões para novos features do programa, como por exemplo o e-mail abaixo.
From: (não exibido) To: brunotc@gmail.com Date: Sep 12, 2005 5:26 PM Subject: Omnitty new feature Hello Bruno, my name is Ralf Fischer and I'm using omnitty for a few weeks now, thanks for this software. I'm a java developer for a german bank and use it to grub around on some of our server farms. One feature i was missing in omnitty is to increase the width of the right-hand terminal area, as the logging statements i'm looking for are usually pretty long and hard to read when wrapped over several lines. So i created a little patch for omnitty, which adds a default terminal area width of 80 (which is the minimum, too) and allows to override it using the new parameter -T. (...) I've attached a (gzipped) patch for omnitty-0.2.9 to add the feature described above, as well as add the option to the man page. If you think it's useful, feel free add it to the next version of omnitty. (...)
Note também a preocupação em atualizar as "man pages" do programa. Um aspecto positivo da comunidade é a considerável importância à documentação dos programas, e a pressão exercida por eles no sentido de sempre mantê-la em sincronia com as funcionalidades do programa.