7. Omnitty/ROTE no SourceForge

Sumário

7.1. Hospedagem no SourceForge

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.

7.2. Feedback da comunidade

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.

7.3. Contribuiçõ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.