LuaRocks
O gerenciador de pacotes
para módulos Lua

Hisham Muhammad
h@hisham.hm

http://www.luarocks.org
Plano
●   Rápida Introdução
    ●   Lua? LuaRocks?
●   LuaRocks
    ●   Conhecendo a ferramenta
●   Evolução do projeto
    ●   Passeio “histórico” por esses 5 anos de LuaRocks
    ●   Experiências sobre a evolução de um projeto de
        software livre
Lua
●   Linguagem “script” criada na PUC-Rio
    ●   Dinâmica, extensível, bytecode+VM...
●   Com algumas características peculiares
    ●
        Minimalismo → tamanho e desempenho
    ●   Projetada como linguagem de extensão para
        embutir em outros programas
●   Muito usada na indústria, especialmente jogos
    ●   Adobe Photoshop Lightroom, Apache, nmap, Wireshark, VLC...
    ●   Angry Birds, Company of Heroes, Civ 5, Garry's Mod, Crysis, Star
        Wars Battlefront, World of Warcraft...
A “cara” de Lua
function process(filename, fn, ...)
   local f = io.open(filename)
   local rets = {}
   for line in f:lines() do
      rets[#rets+1] = { fn(line, …) }
   end
   f:close()
   return rets
end

matches = process("file.txt", string.find, "foo")
for i, match in ipairs(matches) do
   print(i, table.concat(match), ", ")
end
O que é LuaRocks
●   Gerenciador de pacotes...
    ●   similar a dpkg (apt-get), RPM, etc.
    ●   similar a RubyGems, Python Eggs,
        npm, CPAN, etc.

●   ...para módulos Lua
    ●   módulos = bibliotecas para estender a
        linguagem
Por que LuaRocks?
            (e RubyGems, Python Eggs, npm, CPAN, etc...)

    Linguagens “script” costumam ter gerenciadores de
    módulos próprios por dois motivos:

●   muitos módulos
    ●   CPAN: 23.866 pacotes
    ●   Ubuntu: ~37.000 pacotes
●   portabilidade
LuaRocks
●   Tarefas de um gerenciador de módulos
    ●   Instalar
        –   ...e certificar-se que Lua encontrará o módulo
    ●   Remover
        –   ...e certificar-se que as coisas não explodam
    ●   Verificar dependências
        –   ...ao instalar e ao remover
    ●   Compilar
        –   ...porque módulos Lua podem ser escritos
            em Lua ou em C (ou qualquer outra linguagem,
            mas tipicamente C)
LuaRocks e seu “ecossistema”

 Ferramentas de linha de comando

 Formato de regras para empacotamento

 Formato de arquivo para os pacotes

 Servidor de módulos empacotados
Ferramentas
A parte que o usuário de um módulo vê:
~$ wget http://lua.org/ftp/lua-5.1.4.tar.gz
~$ tar zxvpf lua-5.1.4.tar.gz
~$ cd lua-5.1.4; make linux; sudo make install; cd ..
~$ wget http://luarocks.org/releases/luarocks-2.0.6.tar.gz
~$ tar zxvpf luarocks-2.0.6.tar.gz
~$ cd luarocks-2.0.6; ./configure; sudo make install; cd ..
~$ sudo luarocks install luasocket
~$ lua
Lua 5.1.4   Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require "socket"
Comandos do luarocks
●   build                               ●   remove
    para compilar                           para desinstalar
●   install                             ●   pack
    para usar binários                      para gerar um pacote
●   download                            ●   path
    para só baixar                          para configurar o ambiente
●   list                                ●   unpack
    para listar os pacotes instalados       para quem quer desempacotar e
                                            mexer no conteúdo
●   show
    para mostrar informações de um      ●   make
    pacote instalado                        para testar, no desenvolvimento
                                        ●   help
                                            sempre importante
Como criar um pacote

    Um pacote em LuaRocks é um “rock”



Ele é criado a partir de um arquivo “rockspec”
Rocks
●   Um rock contém módulos e o rockspec
    ●   Pode conter os binários ou os fontes
●   Arquivo com nome no formato
    pacote-versao-revisao.tipo.rock:
    ●   Exemplos: luafilesystem-1.5.0-2.src.rock,
        lpeg-0.10-2.linux-x86.rock, lxsh-0.8.6-1.all.rock
●   Na verdade é um arquivo .zip, com conteúdo
    padronizado:
    ●   Arquivos rockspec e rock_manifest na raiz
    ●   Subdiretórios lua/, lib/, bin/...
Rockspecs
●   Um rockspec um arquivo texto
    com regras que indicam:
    ●   De onde baixar os fontes
    ●   Quais as suas dependências
    ●   Como compilar
    ●   Como instalar
●   Na verdade é um arquivo Lua
    ●   Um dos talentos de Lua é servir como linguagem
        de descrição de dados
A “cara” de um rockspec
package = "LPeg"
version = "0.9-1"
source = {
   url = "http://www.inf.puc-rio.br/~roberto/lpeg/lpeg-0.9.tar.gz",
   md5 = "84a4f5fb4b87b90bb1b7284ec6bb69bc"
}
description = {
   summary = "Parsing Expression Grammars For Lua",
   detailed = [[LPeg is a new pattern-matching library for Lua...]],
   homepage = "http://www.inf.puc-rio.br/~roberto/lpeg.html",
   license = "MIT/X11"
}
dependencies = {
   "lua >= 5.1"
}
build = {
   type = "builtin",
   modules = {
      lpeg = "lpeg.c",
      re = "re.lua"
   },
   copy_directories = { "tests" }
}
Usando Lua como formato de dados
●   Permite bastante expressividade, declarar
    variáveis auxiliares, etc.
●   O rockspec é carregado em um ambiente
    especial, sem acesso aos módulos padrão de
    Lua
    ●   Você não consegue chamar io.open, os.execute
        e afins em um rockspec
    ●   O pior que você poderia fazer é um
        while true do end
        e congelar a ferramenta de linha de comando
Disponibilizando os rocks

        Publicando online repositórios,
         chamados de “rocks servers”



       Podem ser gerenciados usando a
ferramenta de linha de comando luarocks-admin
Rocks server
●   Um conjunto de pacotes .rock
    disponíveis online é um “rocks server”
    ●   Um conjunto de rocks instalados localmente é
        chamado de “rocks tree”
●   Na verdade, é só uma URL HTTP
    ●   Pode-se usar qualquer servidor web
    ●   Diretório contendo arquivos .rock e um arquivo
        manifest
    ●   O manifest e um index.html são gerados pelo
        rodando luarocks-admin no diretório
Comandos do luarocks-admin
●   make-manifest
    para preparar um diretório para ser um repositório
●   add
    para adicionar pacotes a um repositório
●   remove
    para remover pacotes de um repositório
●   refresh-cache
    para atualizar a cache local de um repositório
    (bom para mirrors, backups)
●   help
    não pode faltar
Repositório público do LuaRocks.org
●   A maioria dos desenvolvedores nunca lida com
    a gerência de um rocks server
●   Módulos são disponibilizados no server público:
    http://luarocks.org/repositories/rocks/
●   Há também um repositório para versões
    “unstable”, que baixa fontes direto do
    Git/SVN/etc.:
    http://luarocks.org/repositories/rocks-scm/
Atualmente
●   LuaRocks está na versão 2.0.6
●   Temos 157 projetos no repositório público
    (573 rocks disponibilizados)
    ●   É muito pouco perto dos 23.866 de Perl
    ●   Mas já é ~4x mais do que os ~40 módulos Lua
        empacotados como .deb (Debian/Ubuntu)
    ●   Para várias plataformas, simplesmente
        não havia um repositório unificado de módulos
Período de desenvolvimento
●   0.1: agosto 2007
                                 ●   1.0: setembro 2008
●   0.2: outubro 2007
●   0.3: dezembro 2007
                                     ●   1.0.1: março 2009
     ●   0.3.1: dezembro 2007
                                 ●   2.0: outubro 2009
     ●   0.3.2: dezembro 2007        ●   2.0.1: outubro 2009
●   0.4: janeiro 2008
                                     ●   2.0.2: abril 2010
     ●   0.4.1: janeiro 2008
     ●   0.4.2: fevereiro 2008
                                     ●   2.0.3: setembro 2010
     ●   0.4.3: março 2008           ●   2.0.4: dezembro 2010
●   0.5: abril 2008                       –   2.0.4.1: janeiro 2010
     ●   0.5.1: abril 2008           ●   2.0.5: agosto 2011
     ●   0.5.2: maio 2008
                                     ●   2.0.6: outubro 2011
●   0.6: junho 2008
Gênese
●   Surgiu no contexto do Projeto Kepler
    http://www.keplerproject.org



    ●   Projeto criado pela Fábrica Digital e PUC-Rio em 2004 com o
        objetivo de criar uma plataforma para programação web usando
        Lua
    ●   Financiamento via parceria empresa-universidade, FINEP,
        CNPq...
    ●   Encerrado o projeto institucional, hoje os projetos de software
        livre surgidos ali são mantidos por voluntários como eu
Fase 0.x: “release early, release often”
●   0.1: agosto 2007
                                 ●   Não havia uma cultura bem
●   0.2: outubro 2007                estabelecida de módulos reusáveis
●   0.3: dezembro 2007               em Lua
     ●   0.3.1: dezembro 2007        ●   Lua existe desde '93-'94, o sistema
     ●   0.3.2: dezembro 2007            de módulos só entrou em 2006
●   0.4: janeiro 2008            ●   Primeiras versões serviam para
     ●   0.4.1: janeiro 2008         atender ao projeto Kepler
     ●   0.4.2: fevereiro 2008       ●   Popularidade dos módulos Kepler
     ●   0.4.3: março 2008               alavancaram o LuaRocks
●   0.5: abril 2008              ●   Com o tempo ganhamos usuários, e
     ●   0.5.1: abril 2008           com eles módulos e bug reports
     ●   0.5.2: maio 2008            ●   E com os bug reports, releases
●   0.6: junho 2008
Fase 1.x: estabilizando
●   1.0: setembro 2008               ●   Objetivos do design inicial atingidos
    ●   1.0.1: março 2009            ●   Algumas decisões de design
●   2.0: outubro 2009                    serviam bem ao Kepler, mas iam
    ●   2.0.1: outubro 2009              contra a preferência da maioria da
                                         comunidade Lua
    ●   2.0.2: abril 2010
    ●   2.0.3: setembro 2010
                                         ●   Alguns usuários compraram a ideia,
                                             outros não
    ●   2.0.4: dezembro 2010
         –   2.0.4.1: janeiro 2010
                                     ●   Fim do financiamento institucional
    ●   2.0.5: agosto 2011               ●   Deixa de ser um emprego, passa a
    ●   2.0.6: outubro 2011
                                             trabalho voluntário
                                         ●   E os releases rareiam
                                     ●   ...mas o Lua Team enfim demonstra
                                         interesse no LuaRocks!
Fase 2.x: redesign e continuidade
●   1.0: setembro 2008               ●   Redesign das partes problemáticas
    ●   1.0.1: março 2009                ●   Para entrar em sintonia com a
●   2.0: outubro 2009                        comunidade e funcionar out of the
                                             box com Lua padrão
    ●   2.0.1: outubro 2009
                                         ●   Aceitação melhorou bastante,
    ●   2.0.2: abril 2010
                                             mas ainda há alguma resistência
    ●   2.0.3: setembro 2010
                                     ●   Base de usuários vem crescendo
    ●   2.0.4: dezembro 2010
         –   2.0.4.1: janeiro 2010
                                         ●   Parceria com a distro “Lua for
                                             Windows”
    ●   2.0.5: agosto 2011
    ●   2.0.6: outubro 2011
                                         ●   LuaRocks sendo usado em ambiente
                                             de produção
                                         ●   E com isso trabalhos freelance
                                             aparecendo
O futuro
●   O feedback dos usuários aponta melhorias para o
    formato rockspec
    ●   mas quebrar compatibilidade é sempre traumático
●   A maior falta sentida atualmente é de um serviço web
    para contribuição de módulos para o repositório
    público
    ●   atualmente os módulos são enviados via mailing list
    ●   potencial aberto para estabelecer um novo hub para a
        comunidade Lua, com a atual ausência do luaforge.net
    ●   isto seria toda uma nova frente de trabalho
Algumas lições aprendidas
●   Compreender o contexto da comunidade onde
    o projeto se insere
    ●   Mesmo (e principalmente!) quando se quer
        “mudá-la” um pouco
●   Todo projeto existe dentro de um contexto
    ●   Experiência sentida também em projetos anteriores
        (GoboLinux, htop)
    ●   Procure entender e se encaixar esse contexto,
        não para ser político, mas porque isso é necessário
        para que o software seja útil
Programar em comunidade
●   É preciso criar condições para que as pessoas possam
    ajudar o projeto
    ●   Documentação
         –   É chato mas é necessário
         –   Para usuários (manual, help) e programadores (LuaDoc)
    ●   “Suporte”: interação em listas, bug trackers, etc.
    ●   Escolhas de design e implementação
         –   LuaRocks teve seus erros e seus acertos
●   Você só ganha retorno depois de formar uma massa
    crítica de usuários
         –   Mas depois que essa barreira é quebrada, o esforço “se paga”, na
             forma de bugfixes, features...
Obrigado!
●   Perguntas?

●   Contato:
    http://luarocks.org/
      Lista: https://lists.sourceforge.net/lists/listinfo/luarocks-developers/

    http://hisham.hm/
      Email: h@hisham.hm

LuaRocks - palestra Hack'n'Rio 2011

  • 1.
    LuaRocks O gerenciador depacotes para módulos Lua Hisham Muhammad h@hisham.hm http://www.luarocks.org
  • 2.
    Plano ● Rápida Introdução ● Lua? LuaRocks? ● LuaRocks ● Conhecendo a ferramenta ● Evolução do projeto ● Passeio “histórico” por esses 5 anos de LuaRocks ● Experiências sobre a evolução de um projeto de software livre
  • 3.
    Lua ● Linguagem “script” criada na PUC-Rio ● Dinâmica, extensível, bytecode+VM... ● Com algumas características peculiares ● Minimalismo → tamanho e desempenho ● Projetada como linguagem de extensão para embutir em outros programas ● Muito usada na indústria, especialmente jogos ● Adobe Photoshop Lightroom, Apache, nmap, Wireshark, VLC... ● Angry Birds, Company of Heroes, Civ 5, Garry's Mod, Crysis, Star Wars Battlefront, World of Warcraft...
  • 4.
    A “cara” deLua function process(filename, fn, ...) local f = io.open(filename) local rets = {} for line in f:lines() do rets[#rets+1] = { fn(line, …) } end f:close() return rets end matches = process("file.txt", string.find, "foo") for i, match in ipairs(matches) do print(i, table.concat(match), ", ") end
  • 5.
    O que éLuaRocks ● Gerenciador de pacotes... ● similar a dpkg (apt-get), RPM, etc. ● similar a RubyGems, Python Eggs, npm, CPAN, etc. ● ...para módulos Lua ● módulos = bibliotecas para estender a linguagem
  • 6.
    Por que LuaRocks? (e RubyGems, Python Eggs, npm, CPAN, etc...) Linguagens “script” costumam ter gerenciadores de módulos próprios por dois motivos: ● muitos módulos ● CPAN: 23.866 pacotes ● Ubuntu: ~37.000 pacotes ● portabilidade
  • 7.
    LuaRocks ● Tarefas de um gerenciador de módulos ● Instalar – ...e certificar-se que Lua encontrará o módulo ● Remover – ...e certificar-se que as coisas não explodam ● Verificar dependências – ...ao instalar e ao remover ● Compilar – ...porque módulos Lua podem ser escritos em Lua ou em C (ou qualquer outra linguagem, mas tipicamente C)
  • 8.
    LuaRocks e seu“ecossistema” Ferramentas de linha de comando Formato de regras para empacotamento Formato de arquivo para os pacotes Servidor de módulos empacotados
  • 9.
    Ferramentas A parte queo usuário de um módulo vê: ~$ wget http://lua.org/ftp/lua-5.1.4.tar.gz ~$ tar zxvpf lua-5.1.4.tar.gz ~$ cd lua-5.1.4; make linux; sudo make install; cd .. ~$ wget http://luarocks.org/releases/luarocks-2.0.6.tar.gz ~$ tar zxvpf luarocks-2.0.6.tar.gz ~$ cd luarocks-2.0.6; ./configure; sudo make install; cd .. ~$ sudo luarocks install luasocket ~$ lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > require "socket"
  • 10.
    Comandos do luarocks ● build ● remove para compilar para desinstalar ● install ● pack para usar binários para gerar um pacote ● download ● path para só baixar para configurar o ambiente ● list ● unpack para listar os pacotes instalados para quem quer desempacotar e mexer no conteúdo ● show para mostrar informações de um ● make pacote instalado para testar, no desenvolvimento ● help sempre importante
  • 11.
    Como criar umpacote Um pacote em LuaRocks é um “rock” Ele é criado a partir de um arquivo “rockspec”
  • 12.
    Rocks ● Um rock contém módulos e o rockspec ● Pode conter os binários ou os fontes ● Arquivo com nome no formato pacote-versao-revisao.tipo.rock: ● Exemplos: luafilesystem-1.5.0-2.src.rock, lpeg-0.10-2.linux-x86.rock, lxsh-0.8.6-1.all.rock ● Na verdade é um arquivo .zip, com conteúdo padronizado: ● Arquivos rockspec e rock_manifest na raiz ● Subdiretórios lua/, lib/, bin/...
  • 13.
    Rockspecs ● Um rockspec um arquivo texto com regras que indicam: ● De onde baixar os fontes ● Quais as suas dependências ● Como compilar ● Como instalar ● Na verdade é um arquivo Lua ● Um dos talentos de Lua é servir como linguagem de descrição de dados
  • 14.
    A “cara” deum rockspec package = "LPeg" version = "0.9-1" source = { url = "http://www.inf.puc-rio.br/~roberto/lpeg/lpeg-0.9.tar.gz", md5 = "84a4f5fb4b87b90bb1b7284ec6bb69bc" } description = { summary = "Parsing Expression Grammars For Lua", detailed = [[LPeg is a new pattern-matching library for Lua...]], homepage = "http://www.inf.puc-rio.br/~roberto/lpeg.html", license = "MIT/X11" } dependencies = { "lua >= 5.1" } build = { type = "builtin", modules = { lpeg = "lpeg.c", re = "re.lua" }, copy_directories = { "tests" } }
  • 15.
    Usando Lua comoformato de dados ● Permite bastante expressividade, declarar variáveis auxiliares, etc. ● O rockspec é carregado em um ambiente especial, sem acesso aos módulos padrão de Lua ● Você não consegue chamar io.open, os.execute e afins em um rockspec ● O pior que você poderia fazer é um while true do end e congelar a ferramenta de linha de comando
  • 16.
    Disponibilizando os rocks Publicando online repositórios, chamados de “rocks servers” Podem ser gerenciados usando a ferramenta de linha de comando luarocks-admin
  • 17.
    Rocks server ● Um conjunto de pacotes .rock disponíveis online é um “rocks server” ● Um conjunto de rocks instalados localmente é chamado de “rocks tree” ● Na verdade, é só uma URL HTTP ● Pode-se usar qualquer servidor web ● Diretório contendo arquivos .rock e um arquivo manifest ● O manifest e um index.html são gerados pelo rodando luarocks-admin no diretório
  • 18.
    Comandos do luarocks-admin ● make-manifest para preparar um diretório para ser um repositório ● add para adicionar pacotes a um repositório ● remove para remover pacotes de um repositório ● refresh-cache para atualizar a cache local de um repositório (bom para mirrors, backups) ● help não pode faltar
  • 19.
    Repositório público doLuaRocks.org ● A maioria dos desenvolvedores nunca lida com a gerência de um rocks server ● Módulos são disponibilizados no server público: http://luarocks.org/repositories/rocks/ ● Há também um repositório para versões “unstable”, que baixa fontes direto do Git/SVN/etc.: http://luarocks.org/repositories/rocks-scm/
  • 20.
    Atualmente ● LuaRocks está na versão 2.0.6 ● Temos 157 projetos no repositório público (573 rocks disponibilizados) ● É muito pouco perto dos 23.866 de Perl ● Mas já é ~4x mais do que os ~40 módulos Lua empacotados como .deb (Debian/Ubuntu) ● Para várias plataformas, simplesmente não havia um repositório unificado de módulos
  • 21.
    Período de desenvolvimento ● 0.1: agosto 2007 ● 1.0: setembro 2008 ● 0.2: outubro 2007 ● 0.3: dezembro 2007 ● 1.0.1: março 2009 ● 0.3.1: dezembro 2007 ● 2.0: outubro 2009 ● 0.3.2: dezembro 2007 ● 2.0.1: outubro 2009 ● 0.4: janeiro 2008 ● 2.0.2: abril 2010 ● 0.4.1: janeiro 2008 ● 0.4.2: fevereiro 2008 ● 2.0.3: setembro 2010 ● 0.4.3: março 2008 ● 2.0.4: dezembro 2010 ● 0.5: abril 2008 – 2.0.4.1: janeiro 2010 ● 0.5.1: abril 2008 ● 2.0.5: agosto 2011 ● 0.5.2: maio 2008 ● 2.0.6: outubro 2011 ● 0.6: junho 2008
  • 22.
    Gênese ● Surgiu no contexto do Projeto Kepler http://www.keplerproject.org ● Projeto criado pela Fábrica Digital e PUC-Rio em 2004 com o objetivo de criar uma plataforma para programação web usando Lua ● Financiamento via parceria empresa-universidade, FINEP, CNPq... ● Encerrado o projeto institucional, hoje os projetos de software livre surgidos ali são mantidos por voluntários como eu
  • 23.
    Fase 0.x: “releaseearly, release often” ● 0.1: agosto 2007 ● Não havia uma cultura bem ● 0.2: outubro 2007 estabelecida de módulos reusáveis ● 0.3: dezembro 2007 em Lua ● 0.3.1: dezembro 2007 ● Lua existe desde '93-'94, o sistema ● 0.3.2: dezembro 2007 de módulos só entrou em 2006 ● 0.4: janeiro 2008 ● Primeiras versões serviam para ● 0.4.1: janeiro 2008 atender ao projeto Kepler ● 0.4.2: fevereiro 2008 ● Popularidade dos módulos Kepler ● 0.4.3: março 2008 alavancaram o LuaRocks ● 0.5: abril 2008 ● Com o tempo ganhamos usuários, e ● 0.5.1: abril 2008 com eles módulos e bug reports ● 0.5.2: maio 2008 ● E com os bug reports, releases ● 0.6: junho 2008
  • 24.
    Fase 1.x: estabilizando ● 1.0: setembro 2008 ● Objetivos do design inicial atingidos ● 1.0.1: março 2009 ● Algumas decisões de design ● 2.0: outubro 2009 serviam bem ao Kepler, mas iam ● 2.0.1: outubro 2009 contra a preferência da maioria da comunidade Lua ● 2.0.2: abril 2010 ● 2.0.3: setembro 2010 ● Alguns usuários compraram a ideia, outros não ● 2.0.4: dezembro 2010 – 2.0.4.1: janeiro 2010 ● Fim do financiamento institucional ● 2.0.5: agosto 2011 ● Deixa de ser um emprego, passa a ● 2.0.6: outubro 2011 trabalho voluntário ● E os releases rareiam ● ...mas o Lua Team enfim demonstra interesse no LuaRocks!
  • 25.
    Fase 2.x: redesigne continuidade ● 1.0: setembro 2008 ● Redesign das partes problemáticas ● 1.0.1: março 2009 ● Para entrar em sintonia com a ● 2.0: outubro 2009 comunidade e funcionar out of the box com Lua padrão ● 2.0.1: outubro 2009 ● Aceitação melhorou bastante, ● 2.0.2: abril 2010 mas ainda há alguma resistência ● 2.0.3: setembro 2010 ● Base de usuários vem crescendo ● 2.0.4: dezembro 2010 – 2.0.4.1: janeiro 2010 ● Parceria com a distro “Lua for Windows” ● 2.0.5: agosto 2011 ● 2.0.6: outubro 2011 ● LuaRocks sendo usado em ambiente de produção ● E com isso trabalhos freelance aparecendo
  • 26.
    O futuro ● O feedback dos usuários aponta melhorias para o formato rockspec ● mas quebrar compatibilidade é sempre traumático ● A maior falta sentida atualmente é de um serviço web para contribuição de módulos para o repositório público ● atualmente os módulos são enviados via mailing list ● potencial aberto para estabelecer um novo hub para a comunidade Lua, com a atual ausência do luaforge.net ● isto seria toda uma nova frente de trabalho
  • 27.
    Algumas lições aprendidas ● Compreender o contexto da comunidade onde o projeto se insere ● Mesmo (e principalmente!) quando se quer “mudá-la” um pouco ● Todo projeto existe dentro de um contexto ● Experiência sentida também em projetos anteriores (GoboLinux, htop) ● Procure entender e se encaixar esse contexto, não para ser político, mas porque isso é necessário para que o software seja útil
  • 28.
    Programar em comunidade ● É preciso criar condições para que as pessoas possam ajudar o projeto ● Documentação – É chato mas é necessário – Para usuários (manual, help) e programadores (LuaDoc) ● “Suporte”: interação em listas, bug trackers, etc. ● Escolhas de design e implementação – LuaRocks teve seus erros e seus acertos ● Você só ganha retorno depois de formar uma massa crítica de usuários – Mas depois que essa barreira é quebrada, o esforço “se paga”, na forma de bugfixes, features...
  • 29.
    Obrigado! ● Perguntas? ● Contato: http://luarocks.org/ Lista: https://lists.sourceforge.net/lists/listinfo/luarocks-developers/ http://hisham.hm/ Email: h@hisham.hm