A execução de binários no kernel Linux é controlada através do binfmt_misc
module (abreviação de “diversos formatos binários”). A maneira como funciona é que o kernel examina os primeiros bytes do arquivo e vê se existe um “ número mágico ” que caracteriza um formato de arquivo conhecido. A idéia é que, se o kernel visualizar o número mágico de um executável .NET, ele chama mono
; se ele vir o número mágico de um jar (binário de máquina virtual Java), ele chama um JRE; etc.
O problema com Mono e Wine é que o número mágico é o mesmo - um executável .NET é um executável do Windows. Se ambos os formatos estiverem registrados com binfmt_misc
, o que for registrado pela última vez ganha. Opa.
Em um sistema derivado do Debian, o número mágico para executáveis do Windows não invoca wine ou mono diretamente: ele passa por um script que realiza testes adicionais para decidir qual ambiente usar. O script em questão foi inicialmente escrito para o Debian; poderia ser usado por outras distribuições (por exemplo, o Ubuntu o manteve).
Aparentemente, sua distribuição (qual deles? você não diz!) não usa. A primeira coisa a verificar seria se algumas atualizações que você não aplicou incluem algo semelhante. Se você gostaria de portar o mecanismo, aqui é onde encontrar os bits; é uma pequena tarefa de programação. O script é /usr/share/binfmt-support/run-detectors
no pacote binfmt-support (você também precisa das bibliotecas em /usr/share/perl5/Binfmt
) ; para mono, o detector é /usr/lib/cli/binfmt-detector-cli
no mono-comum ou mono-runtime package.
Se a sua distribuição não tem suporte especial e você não se importa com os binários de vinhos, uma rota mais manual seria mais fácil. O módulo binfmt_misc
é controlado pelo diretório /proc/sys/fs/binfmt_misc
. Você pode registrar um formato escrevendo para /proc/sys/fs/binfmt_misc/register
; Cada arquivo nesse diretório diferente de register
e status
representa um formato registrado. Tenha cuidado ao gravar em register
: se você registrar acidentalmente um número mágico que corresponda a executáveis nativos do Linux (ELF), é provável que você mangueira seu sistema sem solução diferente de reinicialização. Para anular o registo do formato wine
, echo -1
to /proc/sys/fs/binfmt_misc/wine
. O módulo binfmt_misc
está documentado em Documentation/binfmt_misc.txt.gz
na documentação do kernel do Linux.
Uma solução para o seu problema seria cancelar o registro do formato do vinho; você teria que fazer isso depois do script de inicialização registrar os formatos binários. Uma solução alternativa é descobrir onde, no processo de inicialização, o formato do vinho está registrado e pular esta parte. Uma terceira solução é encontrar uma maneira de distinguir executáveis .NET de outros executáveis do Windows e registrar o número mágico do .NET após o número mágico genérico do Windows.