-
Notifications
You must be signed in to change notification settings - Fork 2
Introdução para (hu)manos #8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Introdução para (hu)manos #8
Conversation
Tentando deixar a intro menos acadêmica
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A ideia é boa, mas precisa de muito polimento.
src/0-introducao.md
Outdated
|
||
Um dos títulos que dão ao Nix é que ele é um gerenciador de pacotes mas a base dele permite que ele seja algo bem mais generalizável. | ||
**[Nix](https://nixos.org/explore.html)**<sup>🇬🇧</sup> é um gerenciador de pacotes de software como dpkg/apt do Debian ou rpm do RedHat. Entretanto, assim como AppImage, Flatpack e Snap, pode ser instalado em *qualquer distribuição Linux*, e também em *Android*, *MacOS* ou *WSL*. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
**[Nix](https://nixos.org/explore.html)**<sup>🇬🇧</sup> é um gerenciador de pacotes de software como dpkg/apt do Debian ou rpm do RedHat. Entretanto, assim como AppImage, Flatpack e Snap, pode ser instalado em *qualquer distribuição Linux*, e também em *Android*, *MacOS* ou *WSL*. | |
**[Nix](https://nixos.org/explore.html)**<sup>🇬🇧</sup> é um gerenciador de pacotes, similar em conceito ao dpkg/apt (Debian), ao rpm (RedHat e ao Portage do Gentoo. Entretanto, de maneira similar ao [Homebrew](https://brew.sh/) ele pode ser instalado em qualquer distribuição *Linux*, e também em sistemas *Android*, *MacOS* e Windows (mediante *WSL*). |
O Nix não é semelhante ao Flatpak, o conceito é bem diferente. Flatpak e amigos é algo mais próximo daqueles instaladores NSIS do mundo Windows.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Flatpak e amigos não são pacotes que dá apra instalar em conjunto com os pacotes de sistema sem zoar coisa toda ao contrario de se eu juntasse dpkg, rpm, portage e pacman?
O fato deles também terem uma interface melhor para usuários iniciantes não tira-lhes o merito.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ser multiplataforma (ou, no caso, multidistro) não é o distintivo do flatpak.
E ninguém que vê o Nix olha e pensa "nossa, isso é igualzinho aos instaladores next-next-next-finish do Windows". Isso é o distintivo do flatpak.
E eu não estou falando de amigabilidade, mas do conceito mesmo. O Synaptic fornece uma interface bonitinha ao APT mas isso não faz o Synaptic "semelhante ao flatpak".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pois tenho mesma percepção sobre tua sugestão do homebrew, só consigo pensar em: 'olha um gerenciador de pacote para linha de comando do Mac', excluindo o isolamento do pacote, que no Mac era meio que padrão usando o 'gerenciador'' (arrastar o pacote para algum lugar), só não tinha repositório, mas repositório apt-get, yum, já tinham e sempre me fez pensar em homebrew como um apt-get/dpkg para que não tem um Unix decente.
Qualquer distro popular hoje já tem instalador next-next-finish, e já tinham muito antes do Flatpack e afins, se eles só existissem para isso, eles nem existiriam. O que eles realmente oferecem é:
- repositório único para qualquer distro (nixpkgs)
- garantia de que o pacote vai funcionar em qualquer distro (nix drv)
Mas popularmente um caso em que tua ideia se aplica a Flatpak e afins, é com Steamdeck, "de quero fazer algo amigável para o usuário, não tenho nenhum histórico/apego/bagagem de dpkg/rpm/pacman para carregar, e meu negócio é meu próprio gerenciador marketplace, para que deixar 3 interfaces?". Hipótese, pois não tenho para ter certeza, de que um usuário do steamdeck vai achar que Flatpak, ou seja lá o que usem, é o 'playstore' do linux.
E o no mundo dos servidores todo mundo perdeu para docker containers
src/0-introducao.md
Outdated
|
||
O Nix em sí é uma linguagem de programação de tipagem dinâmica que segue o paradigma funcional e seus conceitos mas que possui um diferencial que muda totalmente o jogo: O conceito de derivação. | ||
Seu principal foco é que os pacotes sejam 100% reproduzíveis, para isso isola a compilação do pacote, não permitindo acesso à internet, bibliotecas ou ferramentas externas que não possuam versão (hash) ou não estejam declaradas como dependência. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seu principal foco é que os pacotes sejam 100% reproduzíveis, para isso isola a compilação do pacote, não permitindo acesso à internet, bibliotecas ou ferramentas externas que não possuam versão (hash) ou não estejam declaradas como dependência. | |
Nix tem um foco em _reproducibilidade_. Para isso, ele toma uma série de medidas, entre elas: | |
- separa a aquisição de fontes (código-fonte propriamente dito, _patches_ etc.) das demais fases de construção do pacote; | |
- exige verificação (mediante _hash sum_) das fontes adquiridas; | |
- impede o acesso à Internet durante a compilação do pacote; | |
- impede o acesso a arquivos e programas que não foram explicitamente requisitados como dependências; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Acho que reproducibilidade devia ser reprodutibilidade
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
É vero.
Co-authored-by: Anderson Torres <[email protected]>
Co-authored-by: Anderson Torres <[email protected]>
Co-authored-by: Anderson Torres <[email protected]>
Co-authored-by: Anderson Torres <[email protected]>
Desbandeirado
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Algumas muitas sugestões.
Depois vejo o restante.
Para cada pacote são necessárias informações como nome, origem do código-fonte (caminho ou endereço online), versão (hash), dependências e instruções de compilação ou empacotamento. | ||
|
||
Essas informações devem ser descritas geralmente em um arquivo `default.nix` usando a linguagem programação de domínio especifico do Nix, também chamada **Nix** ou **Nix DSL**, é parecida com JSON, mas tem funções, variáveis pode importar outros arquivos Nix. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Acho que dá para deixar isso mais limpo:
Para cada pacote são necessárias informações como nome, origem do código-fonte (caminho ou endereço online), versão (hash), dependências e instruções de compilação ou empacotamento. | |
Essas informações devem ser descritas geralmente em um arquivo `default.nix` usando a linguagem programação de domínio especifico do Nix, também chamada **Nix** ou **Nix DSL**, é parecida com JSON, mas tem funções, variáveis pode importar outros arquivos Nix. | |
Nix utiliza uma linguagem de programação própria para descrever o processo de implantação (_deploy_) de software. | |
Esta linguagem usa uma abordagem funcional semelhante a (Haskell)[https://www.haskell.org/], mas com uma sintaxe própria inspirada em [JSON](https://www.json.org/json-pt.html). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Eu até estava pensando em instalar, mas você falou funcional e haskell, deve ser chato difícil" - Pensa Joaozinho de 19 anos em seu Ubuntu.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Se a gente falar derivation nunca mais vai ver o cara na vida 💣 🤣
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Desculpa, mas desde que Java começou a incluir elementos funcionais na linguagem, isso deixou de ser coisa de nerd leitor de paper do arxiv.
Ubuntu? Por favor, a distro do momento para novatos é o Pop!OS e o Linux Mint, se atualiza.
Enfim, isso é só uma curiosidade sobre as origens da linguagem. Ou você acha mermu que esse hipotético Joãozinho Ubunteiro de 19 anos sabe o que é JSON?
E se souber, é bem capaz que tenha visto programação funcional em Javascript, haha!
Ninguém está sugerindo ser necessário estudar Haskell para usar Nix, não mais que estudar Modula para entender Python.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
> deriveishoun assusta as pessoa
> DSL
🤦
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isso deixou de ser coisa de nerd leitor de paper do arxiv.
[ Citation needed ]
Joãozinho Ubunteiro de 19 anos sabe o que é JSON?
Preferia que ele não precisasse saber o que é JSON para usar Nix,
Mas como é muito orientado a configuração, nosso mínimo é:
Abrir um arquivo num editor de texto, ter noção de que aquilo respeita uma estrutura.
Em 24/01/2022 fiz a seguinte estatística nada ciêntifica (busquei no github por quantidade de arquivos)
Ninguém está sugerindo ser necessário estudar Haskell para usar Nix, não mais que estudar Modula para entender Python.
Se colocar Haskel nessa imagem aí que o cara desiste mesmo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[citation needed]
https://opensource.com/article/17/6/functional-javascript
https://www.amazon.com.br/Functional-JavaScript-Steve-Vinoski/dp/1449360726
https://medium.com/@mvalho/java-8-functional-interfaces-tornando-o-java-mais-legal-72401462d0e2
- Tipo, século passado em tempo de programador.
E Java 8 era novidade na época. Hoje em dia estamos no Java 20.
Só se for 39% (Pop + Mint)
O fonte fala de websites. Mas que seja.
E, das langs aí em cima, acho que só C e HTML não têm suporte a paradigmas funcionais.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Tipo, século passado em tempo de programador.
Nix tem 20 anos, dá alguns séculos nessa linha de pensamento, e não é popular
Quando chega gente nova e pergunta alguma coisa a gente fala:
Nóis: - Sabe haskell...?
Newbie: - não
Nóis: - Ok, mas sabe OCaml?
Newbie: - não
Nóis: - Lisp, Erlang, F#, Clojure, Scala...
Newbie: - não
Nóis: -
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nix tem 20 anos, dá alguns séculos nessa linha de pensamento, e não é popular
Eu apontei que Java - uma linguagem com programadores já velhotes implementou paradigmas funcionais há um bom tempo.
Quando chega gente nova e pergunta alguma coisa a gente fala:
- Já viu Python?
- Já
- Manja o lambda do Python? (ou o list comprehension)
- Um pouco
- Pois bem, isso é programação funcional
Mas não vou perseguir isso.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lembrei disso
@lucasew, toda vez que a gente fala derivation:
https://www.instagram.com/reel/CwoLlzYpuyt/?igshid=MzRlODBiNWFlZA==
|
||
## Nixpkgs a coleção de pacotes | ||
|
||
Existe uma coleção comunitária com mais de 80 mil pacotes Nix, que está configurada por padrão, chamada **[nixpkgs](https://search.nixos.org)**, às vezes referenciada apenas como **pkgs**. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Existe uma coleção comunitária com mais de 80 mil pacotes Nix, que está configurada por padrão, chamada **[nixpkgs](https://search.nixos.org)**, às vezes referenciada apenas como **pkgs**. | |
[Nixpkgs](https://github.com/NixOS/nixpkgs) é uma coleção de mais de 80.000 pacotes que podem ser instalados pelo gerenciador Nix. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gostei do texto, mas é para iniciantes, apontar para o codigo é tipo chegar e perguntar se querem ver o relógio preto
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Justo. Mas uma search engine não é lá a melhor apresentação.
Que seja então o manual: https://nixos.org/manual/nixpkgs/stable/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thus it’s mainly for packagers and developers who want to add packages to Nixpkgs.
😞
A pessoa está na introdução, ainda acho o search menos obtuso.
Na verdade eu queria um nixpkgs guide for nix users e isso aí é mais para um API Guide, Deployment Guide, se fosse seguindo o exemplo abaixo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Na verdade eu queria um nixpkgs guide for nix users
Não temos nada oficial neste sentido.
Ademais, o link precisa ser oficial, não for humans. Até porque este documento que você está editando é precisamente o link para humanos.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
E qual link oficial condiz mais com isso é uma coleção de mais de 80.000 pacotes que podem ser instalados pelo gerenciador Nix.
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Por mim, poderia simplesmente apontar a homepage nixos mesmo.
Afinal, tem uma issue exatamente sobre a falta de páginas dedicadas a explanar o Nixpkgs.
|
||
Utilizando o mesmo conceito do NixOS, **[HomeManager](https://github.com/nix-community/home-manager)** é um *pacote das configurações do usuário*, permitindo instalar pacotes ou configurações especificas para seu usuário, apesar de NixOS também permitir configurações por usuário, HomeManager pode ser instalado em outras distribuições, MacOS e WSL, além disto, possui algumas configurações únicas, sendo usado também em conjunto com NixOS. | ||
|
||
### Projetos como *pacote de ambiente* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
### Projetos como *pacote de ambiente* | |
### Projetos que usam Nix |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Não sei se o título bate,
a ideia inicial era:
nix, onde tudo é um pacote
nixpkgs, coleção de pacotes
nixos, um pacote que é uma distro e configs são pacotes
nix-modules, uma mão na roda para gerar pacotes de config para NixOS
home-manager, um pacote que são as configs do usuário
mkShell, um pacote para projetos de dev, ops ou data science
'Projetos que usam' esta mais para: olha tem quem use.
Talvez, 'Gestão de projetos com Nix' 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Essa parte poderia ser então chamada de funcionalidades extras, e poderia ser bem mais enxuta.
Co-authored-by: Anderson Torres <[email protected]>
Co-authored-by: Anderson Torres <[email protected]>
Co-authored-by: Anderson Torres <[email protected]>
Co-authored-by: Anderson Torres <[email protected]>
@lucasew da uma luiz 🪔 |
Co-authored-by: Anderson Torres <[email protected]>
Co-authored-by: Anderson Torres <[email protected]>
|
||
### Projetos como *pacote de ambiente* | ||
|
||
Caso um desenvolvedor de software, cientista de dados, ou qualquer profissional que precise *ferramentas diferentes para diferentes projetos* do dia a dia, é possível criar um *ambiente para cada projeto*, atualmente exitem diversas ferramentas, algumas usando Nix Modules como [DevEnv](https://github.com/cachix/devenv) e [DevShell](https://github.com/numtide/devshell) outras usando apenas pacotes como [DevBox](https://github.com/jetpack-io/devbox) e [Flox](https://github.com/flox/flox). Também é possível criar teu próprio ambiente apenas com Nix e Nixpkgs criando um arquivo `shell.nix` contendo as definições do teu pacote de ambiente. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note que boa parte desses projetos usa o Nix/Nixpkgs como base, mas não são oficiais. Uma rápida menção na seção de outros já basta.
|
||
Caso um desenvolvedor de software, cientista de dados, ou qualquer profissional que precise *ferramentas diferentes para diferentes projetos* do dia a dia, é possível criar um *ambiente para cada projeto*, atualmente exitem diversas ferramentas, algumas usando Nix Modules como [DevEnv](https://github.com/cachix/devenv) e [DevShell](https://github.com/numtide/devshell) outras usando apenas pacotes como [DevBox](https://github.com/jetpack-io/devbox) e [Flox](https://github.com/flox/flox). Também é possível criar teu próprio ambiente apenas com Nix e Nixpkgs criando um arquivo `shell.nix` contendo as definições do teu pacote de ambiente. | ||
|
||
Existe ainda a possibilidade de iniciar ambiente diretamente usando o comando `nix-shell -p DEPENDENCIA`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Esse aqui merecia um pouco mais de molho. Por exemplo, uma nix-shell rodando um programinha simples como o cowsay...
Co-authored-by: Anderson Torres <[email protected]>
Co-authored-by: Anderson Torres <[email protected]>
Tentando deixar a intro menos acadêmica