O
módulo OSS no mais recente kernel
Linux 3.0 tem 15 anos de obsolidade. Foi morto por uma razão (aparentemente) muito boa, no entanto parece que estamos recebendo um funeral muito longo. ALSA também tem emulação no OSS, e na verdade, existem duas versões redundantes do mesmo: um no kernel e outro implementado em nível de biblioteca. Ambos emulam apenas a API do OSS 3.8, que está totalmente morta.
No entanto, este não é o único OSS disponível, A 4Front continuou trabalhando no Open Sound System em todos os últimos anos, pois tornou-se uma solução para muitos problemas de som enfrentados no Linux, a demanda ainda é grande. Além do Linux, agora é o subsistema de som oficial para todas as variantes Unix (que não seja MacOS). No entanto, para muitos teimosos não é uma alternativa, as vantagens da OSS são amplamente ignoradas, veremos a seguir.
Obs.: Quero deixar claro que não tenho a intenção de tirar vantagem do OSS em cima do Alsa, o que está abaixo foi escrito por Hannu Savolainen, o criador original do Open Sound System, e é a mais pura verdade, não há como questionar, infelizmente (ou não).
As principais vantagens do OSS:
- É baseado no modelo de dispositivo conhecido Unix/POSIX/Linux.
- É totalmente documentado.
- A API é simples e compacta, o que torna muito fácil de usar para programadores.
- Praticamente todas as aplicações já suportam.
- Ele foi projetado para trabalhar em sistemas operacionais de propósito geral, tais como Linux e Unix. Não há necessidade de utilizar qualquer kernel especial com tempo real habilitado (eles podem ser usados, mas não é um requisito).
- Totalmente dinâmico (minor/major), permitindo um número ilimitado de dispositivos de áudio/MIDI/mixer.
- Nomeia novos dispositivos automaticamente.
- Possui um "virtual mixing" transparente, que torna possível, para qualquer número de aplicações, compartilhar o dispositivo de áudio. Isso também funciona para gravação e full duplex.
- Apoio poderoso a enumeração de dispositivos.
Agora fazemos uma pequena comparação com o Alsa:
- Não é totalmente documentado. Use o source, boa sorte :)
- A API não é compatível/similar com qualquer outra coisa (no passado, presente ou futuro).
- Abstração de dispositivos muito fina.
- A API é projetada para baixa latência o que torna muito desafiador para uso em aplicações normais que não têm quaisquer requisitos de latência.
- Requer bibliotecas redundantes de camadas, além do códigos no kernel (alsa-lib, Jack). Isso faz com que aumentem os requisitos de memória em sistemas embarcados.
- Tem um enorme número de funções (mais de 1500), mas a maioria das chamadas não foram usadas pelos os aplicativos.
- Grande número de funções da biblioteca são desnecessárias e isso só ajuda a aumentar o consumo de memória.
- Existem vários métodos de transferência (redundantes) para áudio (como é que o programador vai saber qual deve ser usado com hardware dado?)
- Alguns dispositivos utilizam canais intercalados (para estéreo e multich) enquanto outros não utilização intercalados (non-interleaved).
- Número de cartões, dispositivos e subdevices possível no sistema é limitada.
- Mecanismo de configuração nos arquivos são estranhos, requer diploma em programação LISP para compreender.
- Compartilhamento de dispositivos são baseados em recursos do dmix que ninguém entende (mas os peritos podem configurar corretamente).
- A API é baseada em callbacks que requer conhecimentos de programação profunda dos desenvolvedores. "Gotos" foram considerados prejudiciais por décadas, callbacks são ainda piores (na verdade eles são uma reencarnação da famosa declaração "come-from").
Então qual deve ser declarado como obsoleto? Como estamos falando de APIs, quem tem o direito de tomar a decisão são os desenvolvedores de aplicativos, eles têm a sua "liberdade de escolha".
Comentário de Hannu Savolainen:
Na verdade, não é bom colocar o OSS contra o ALSA desta forma, no entanto, eles estão na mesma há anos. Não pude resistir. Temos dado a eles mais de 3 anos de tempo (já se passa 8 anos hoje) para descobrir e corrigir os problemas acima, mas nada parece ter acontecido. E eu nem sequer mencionei MIDI ainda. Talvez eu deveria fazer isso abaixo...
Atenciosamente,
Hannu