Registrando extensões no kernel com o binfmt_misc
Você alguma vez já pensou que maravilha seria se quando fizesse uma chamada a um programa feito para a plataforma Windows, ele automaticamente fazendo uso do wine, se instalasse? Ou se arquivos compilados em Java se executassem sem necessariamente termos que escrever aquela enorme expressão antes do arquivo que deve ser executado? Pois essa é a função do binfmt_misc, recurso do kernel que será explicado nesse artigo.
Introdução
Você alguma vez já pensou que maravilha seria se quando
fizesse uma chamada a um programa feito para a plataforma
Windows, ele automaticamente fazendo uso do wine, se
instala-se, ou se arquivos compilados em Java se
executassem sem necessariamente termos que escrever aquela
enorme expressão antes do arquivo que deve ser executado?
Mas não parar-mos-ia por aí, poder-mos-ia executar aplicações Perl, Python ou até mesmo Emacs fazendo uso do binfmt_misc. Ele reconhece um arquivo binário lendo alguns bytes no cabeçalho do arquivo caso usemos uma opção denominada magic ou pode até mesmo assimilar a extensão (.exe, .com, .class) usada no arquivo e associá-la ao programa que interpreta o arquivo binário.
Quando queremos executar um programa em Java e temos que escrever:
$ /usr/bin/jdk1.5/java g3Horas
Onde: g3Horas é o arquivo com extensão class que foi compilado com a ferramenta javac da Sun. Se fosse feito o uso do binfmt_misc, aqui bastaria escrever:
$ ./g3Horas.class
Isto já ajudaria bastante o trabalho de muitos programadores. Caso seu sistema não esteja com a extensão class registrada, o kernel retornará um erro dizendo que não pode executar o arquivo binário, isto acontece porque ele ainda não sabe qual o programa que é o interpretador do arquivo, o que nós fazemos é registrar a extensão ou o cabeçalho do arquivo em um arquivo chamado register e informamos ao kernel o endereço do programa que interpreta o arquivo binário.
O register irá criar um arquivo novo para cada extensão ou cabeçalho que você quiser registrar.
Mas não parar-mos-ia por aí, poder-mos-ia executar aplicações Perl, Python ou até mesmo Emacs fazendo uso do binfmt_misc. Ele reconhece um arquivo binário lendo alguns bytes no cabeçalho do arquivo caso usemos uma opção denominada magic ou pode até mesmo assimilar a extensão (.exe, .com, .class) usada no arquivo e associá-la ao programa que interpreta o arquivo binário.
Quando queremos executar um programa em Java e temos que escrever:
$ /usr/bin/jdk1.5/java g3Horas
Onde: g3Horas é o arquivo com extensão class que foi compilado com a ferramenta javac da Sun. Se fosse feito o uso do binfmt_misc, aqui bastaria escrever:
$ ./g3Horas.class
Isto já ajudaria bastante o trabalho de muitos programadores. Caso seu sistema não esteja com a extensão class registrada, o kernel retornará um erro dizendo que não pode executar o arquivo binário, isto acontece porque ele ainda não sabe qual o programa que é o interpretador do arquivo, o que nós fazemos é registrar a extensão ou o cabeçalho do arquivo em um arquivo chamado register e informamos ao kernel o endereço do programa que interpreta o arquivo binário.
O register irá criar um arquivo novo para cada extensão ou cabeçalho que você quiser registrar.
É o linux sempre simplificando nossas vidas!!!
Abraços