Deixe-me descrever o que quero fazer. Quero criar um software/aplicativo que possa rodar tanto no Linux quanto no Windows. Poderia ser qualquer linguagem, por exemplo: cpp,java,python.Preciso saber qual é a maneira mais segura de fazer algo que eu possa compilar (compilação cruzada) em exe no Linux.
Tenho a impressão de que você já ouviu essas perguntas milhões de vezes antes. Mas tenho algumas sugestões para receber de vocês.
A maioria das pessoas me dirá para beber vinho. Eu tentei isso. Mas ouvi dizer que os vírus do Windows podem afetar o sistema Linux através do wine. Então me sinto um pouco desconfortável com isso.
Você poderia me dizer uma maneira de criar arquivos exe do Windows no Linux?
Se você estiver escrevendo em C ou C++, poderá usar o MingW64 para compilar programas para Windows. (É praticamente gcc, mas suporta extensões de sintaxe MSVC e gera um arquivo .exe.) Vários projetos que as pessoas conhecem como aplicativos do Windows são, na verdade, criados usando MinGW64 no Linux, geralmente usando Qt para a interface gráfica.
Acho que o compilador Zig também pode fazer o mesmo (aceita C).
Você provavelmente não precisa fazer nada de especial para Java, pois os aplicativos Java não são executados diretamente em um sistema operacional, eles são executados no Java Runtime (JRE) e há um JRE para Windows e Linux – não importa qual SO em que você compila, o .jar é o mesmo de qualquer maneira.
Da mesma forma, o tempo de execução .NET está disponível no Linux (embora o WinForms não possa ser executado no Linux – mas já vi programas escritos usando gtk-sharp executados no Windows).
A maioria dos vírus do Windows não terá como entrar em um sistema Linux que esteja executando o Wine: ele não possui nenhum dos serviços de rede típicos do Windows (por exemplo, mesmo se você tiver o Samba, ele não será afetado pela grande maioria das vulnerabilidades do Windows SMB.sys simplesmente porque é um programa diferente); não possui um navegador Windows ou um aplicativo de e-mail do Windows; e presumo que você não esteja planejando clicar duas vezes em qualquer .exe aleatório encontrado em um pendrive.
Você pode usar sistemas de plataforma cruzada como Java (que já é plataforma cruzada), Qt (para C/C++) ou Xamarin (ou outras estruturas de plataforma cruzada C#). Eles podem ser compilados em Linux/Windows para qualquer um deles. Você também pode usar apenas clang/gcc em ambos os sistemas e alterar apenas variáveis requeridas pelo sistema ou usar bibliotecas crosspltaform (dearimgui para criação de GIU, por exemplo)