# Linux Standard Base

Linux Standard Base (LSB), traduzido para Base Padrão do Linux, é um projeto conjunto de diversas distribuições Linux sob a estrutura organizacional da Fundação Linux para padronizar a estrutura de sistemas de software, incluindo a hierarquia de sistema de arquivos usada no sistema operacional Linux. A LSB é baseada na especificação POSIX, na Single UNIX Specification e em diversos outros padrões abertos, mas estende-os em determinadas áreas.
De acordo com a LSB:
   O objetivo da LSB é desenvolver e promover um conjunto de padrões abertos que aumentarão a compatibilidade entre distribuições Linux e permitir que aplicações de software rodem em qualquer sistema compatível, mesmo em formato binário. Ademais, a LSB ajudará a coordenar esforços para recrutar fornecedores de software a portarem e escreverem seus produtos para Sistemas Operacionais Linux.
A conformidade LSB pode ser certificada para um produto através de um procedimento de certificação. A certificação é realizada pelo The Open Group na cooperação com a Free Standards Group.
O LSB especifica, por exemplo: bibliotecas padrões, um número de comandos e utilitários que estendem o padrão POSIX, o leiaute da hierarquia do sistema de arquivos, níveis de execução, o sistema de impressão, incluindo spoolers como o CUPS e ferramentas como o Foomatic, e diversas extensões para o sistema X-Window.
O comando lsb_release -a está disponível em muitos sistemas para obter detalhes da versão LSB, ou pode ser disponibilizado pela instalação de um pacote apropriado, por exemplo o pacote redhat-lsb em distribuições derivadas do Red Hat, como o Fedora, ou o pacote lsb_release em distribuições derivadas do Debian.

## História

A Linux Standard Base, iniciada em 1998, foi projetada não apenas para impedir a fragmentação, mas permitir que os fabricantes da aplicação liberem uma única versão de software certificada ao funcionamento em toda a distribuição com conformidade LSB Linux. Para empresas, o sucesso do LSB deve significar a habilidade de mudar entre diferentes distribuições e levar todas de aplicações em conformidade com LSB junto sem nenhuma modificação necessária.
O LSB veio para padronizar as grandes distâncias que as distribuições GNU/Linux estavam tomando.

## Estrutura do LSB

O LSB propõe um módulo principal obrigatório e outros módulos opcionais que podem ou não ser utilizados pelas aplicações. Na versão 3.2 do padrão, existem 4 módulos opcionais.

### Base

São as especificações essenciais para garantir a interoperabilidade básica entre as diferentes distribuições Linux. Esse módulo possui três partes: definição do formato ELF utilizada pelos executáveis, definição das interfaces exigidas e definição do formato dos pacotes de distribuição. A documentação completa pode ser encontrada na parte 1 da especificação do LSB.
LSB 3.2 Core

#### Bibliotecas

Na versão 3.2 do LSB, são exigidas 14 bibliotecas básicas: Libdl, libcrypt, libz, libncurses, libutil, libpthread, librt, libpam, libgcc_s, libm, libc, proginterp.

#### Comandos e Utilitários

O padrão LSB define uma lista de utilitários e comandos que devem ser obrigatoriamente disponibilizados pela distribuição Linux. O comportamento dos comandos segue o padrão ISO POSIX 2003, exceto quando mencionado explicitamente na especificação do LSB.

##### Comandos Internos do shell (built-in)

Na versão 3.2 do LSB, apenas cinco comandos devem ser fornecidos obrigatoriamente pelo Shell.
São eles: cd, getops, read, umask e wait.

##### Utilitários

Na versão 3.2 do LSB, são exigidos os seguintes utilitários:
ar, at, awk, batch, bc, chfn, chsh, col, cpio, crontab, cut, df, dmesg, du, echo, egrep, fgrep, file, find, fuser, gettext, grep, groupadd, groupdel, groupmod, groups, gunzip, gzip, hostname, Install, install_initd, ipcrm, ipcs, killall, lpr, ls, lsb_release, m4, md5sum, mknod, mktemp, more, mount, msgfmt, newgrp, od, passwd, patch, pidof, remove_initd, renice, sed, sendmail, sh, shutdown, su, sync, tar, umount, useradd, userdel, usermod, xargs e zcat.

#### Ambiente de Execução
##### Sistema de Arquivos

O LSB exige que a distribuição Linux utilize a estrutura de sistema de arquivos proposta na versão 2.3 do padrão FHS – File Hierarchy Standard.

##### Internacionalização

O LSB provê uma infra-estrutura básica para a internacionalização baseada nos locales do padrão POSIX 2003. Expressões regulares são suportadas conforme especificado no padrão POSIX 2003, apenas com algumas exceções descritas na especificação do LSB.

#### Inicialização do Sistema

Estão definidas regras para o agendamento de tarefas do Cron, bem como o detalhamento da estrutura necessária nos scripts de inicialização e dos runlevels recomendados ao sistema.

#### Usuários e Grupos

O padrão exige que o UserID e o GroupID do usuário root possuam valor zero. Os demais usuários e grupos do sistema não possuem valores pré-determinados. O usuário bin pertencente ao grupo bin e o usuário daemon pertencente ao grupo daemon devem existir por questão de compatibilidade com sistemas antigos.

### Módulos do LSB
#### Módulo C++

Exige apenas a Biblioteca padrão do C++ (libstdc++).
As implementações desse módulo devem seguir as especificações da Itanium C++ ABI, da ISO/IEC 14882: 2003 C++ Language e da especificação LSB Genérica (Parte 1).
A especificação completa do módulo C++ para a versão 3.2 do LSB pode ser encontrada em LSB 3.2 Specification - C++.

#### Módulo Desktop

Este módulo provê interfaces relacionadas à interação com o usuário e manipulação de imagens e dados. São utilizadas as definições do FreeDesktop.org para a organização das informações utilizadas por diferentes ambientes gráficos.
A especificação completa do módulo desktop para a versão 3.2 do LSB pode ser encontrada em LSB 3.2 Specification - Desktop.

#### Módulo de Impressão

Esse módulo provê funcionalidades completas de impressão para as aplicações e permite que os fabricantes de dispositivos construam drivers que podem ser compartilhados por diversas distribuições Linux.
A especificação completa do módulo de impressão para a versão 3.2 do LSB pode ser encontrada em LSB 3.2 Specification - Printing.

#### Módulo de Linguagens

Este módulo provê suporte a linguagens de programação interpretadas. Na versão 3.2 da LSB, esse módulo provê as seguintes linguagens:
* Python versão 2.4.2 ou superior.
* Perl versão 5.8.8 ou superior.
As linguagens devem ter seu ambiente de execução totalmente funcional, conforme as especificações das mesmas.
Na versão 4.0 do LSB, a linguagem Java foi adicionada ao conjunto experimental de linguagens suportadas. Na versão 4.1 do LSB, o Java foi removido da especificação devido à impossibilidade de prover uma implementação de software livre 100% compatível com a versão proprietária (o conjunto de testes de conformidade do Java possui restrições em sua licença de uso).

## Quem Utiliza

O padrão LSB é suportado pela maioria das distribuições Linux modernas. Mesmo distribuições não certificadas provêm bibliotecas de compatibilidade com o padrão. É o caso de distribuições populares, tais como o Debian, o Ubuntu, o Fedora, o SuSE, dentre outras.

### Distribuições Certificadas

A Linux Foundation provê uma lista com as distribuições certificadas LSB, bem como a versão do padrão para o qual foram certificadas. A lista completa pode ser encontrada em aqui:
Dentre as distribuições Linux certificadas, podemos destacar:
* Oracle Linux 4, 5, 6
* Red Hat Enterprise Linux 4, 5, 6
* Wind River Linux 4
* SuSE Linux Enterprise 11
* Mandriva Enterprise Server 5
* BOSS Linux 4

### Aplicações Certificadas

As aplicações com certificação de compatibilidade LSB abrangem uma vasta gama de utilidades, de impressão à DRM. Dentre as aplicações certificadas, podemos destacar:
* GoAhead OpenSAFfire
* Aly printstream analyzer
* Co:Z Co-Processing Toolkit
* FLEXnet Publisher
* IAgent3 Interactive Agent Gateway

## Certificação LSB

Uma descrição detalhada do processo de certificação pode ser encontrada no site Linux Foundation. Processo de Certificação

### Custo da certificação

O custo da certificação varia conforme o número de arquiteturas para qual o produto será certificado. Para cada arquitetura será cobrada uma taxa adicional. Para aplicações, o custo da certificação é a partir dos US$ 250. Para distribuições, o custo da certificação é a partir de US$2500.
Os valores cobrados para a certificação são significativamente menores para os membros filiados à Linux Foundation. Mais detalhes sobre o custo de certificação pode ser encontrado no site da Linux Foundation. Custo de Certificação

## Histórico de Versões

* 1.0: Versão inicial 2001-06-29.
* 1.1: Publicada em 2002-01-22. Inclusão de especificações para a plataforma (IA32).
* 1.2: Publicada em 2002-06-28. Inclusão de especificações para a plataforma (PowerPC 32-bit). Certificação iniciada em Julho de 2002.
* 1.2.1: Publicada em Outubro de 2002. Inclusão de especificações para a plataforma Itanium.
* 1.3: Publicada em 2002-12-17. Inclusão de especificações para a plataforma (Itanium, Enterprise System Architecture/390, z/Architecture).
* 2.0: Publicada em 2004-08-31.
** O LSB é dividido em módulos:
*** LSB-Core
*** LSB-CXX
*** LSB-Graphics
*** LSB-I18n (não publicado)
** Inclusão de especificações para a plataforma (PowerPC 64-bit, AMD64).
** Ajustado à especificação Single UNIX Specification (SUS) version 3.
* 2.0.1: Publicado em 2004-10-21, versão ISO da LSB 2.0.
* 2.1: Publicado em 2005-03-11.
* 3.0: Publicado em 2005-07-01. Modificações:
** Utilização da ABI C++ do compilador gcc 3.4
** Atualização das especificações essenciais (core) para ISO POSIX (2003)
** Retificações Técnicas 1: 2005
* 3.1: Publicado em 2005-10-31. Padronização ISO/IEC 23360.
* 3.2: Publicado em 2008-01-28. Padronização ISO/IEC 23360.
* 4.0: Publicado em 2008-11-11. Possui as seguintes funcionalidades:
** glibc 2.4
** Compatibilidade binária com LSB 3.x
** SDK mais fácil de usar
** Inclusão das novas versões das bibliotecas GTK e Cairo
** Java (módulo opcional)
** Simplificação da criação de pacotes RPMp compatíveis com a LSB
** Crypto API (via biblioteca Network Security Services) (módulo opcional)
* 4.1: Publicado em 2011-02-16:
** Remoção do Java
* 5.0: Publicado em 2015-06-03:
** Primeira versão principal que quebra a compatibilidade com versões anteriores (compatível com LSB 3.0 e principalmente compatível com LSB 3.1 e posterior, com algumas exceções)
** Incorpora as mudanças feitas no FHS 3.0
** Remoção da QT 3
** Estratégia de módulo evoluída; LSB é modularizado para LSB Core, LSB Desktop, LSB Languages, LSB Imaging, e LSB Trial Use

## Crítica

A LSB tem sido criticada por ser influenciada por empresas membros, declara o projeto Debian, que também é membro da LSB. Por exemplo, a LSB especifica que os programas deveriam ser distribuídos em formato RPM da Red Hat, do qual foi inventado muito depois do formato de empacotamento do projeto Debian, o APT.
A qualidade dos testes de conformidade com o LSB também foi criticada por conter erros nos testes e pelos testes serem incompletos. Em 2005, Ulrich Drepper criticou os testes por possibilitarem inconsistências entre as distribuições certificadas LSB. Algumas distribuições poderiam alterar seu comportamento para passar nos testes defeituosos, enquanto outras poderiam conseguir isenção desses erros no processo de certificação (os resultados dos testes sabidamente defeituosos não são levados em conta na validação final).
Ulrich também reclamou da ausência de testes para as aplicações, dizendo que testar apenas a compatibilidade com algumas distribuições não evidencia os problemas causados quando a aplicação depende de um comportamento definido por uma implementação específica. Em resposta as críticas, a Linux Foundation publicou em 2008, juntamente com o SDK, uma aplicação para validar a compatibilidade das aplicações.
Em outras áreas a operação da LSB é menos controversa, e é recebida com considerável gratificação.