C # e todas as outras linguagens pertencentes ao .NET framework são linguagens interpretadas. Eles são pseudo-compilados, não verdadeiramente compilados (como C). O bytecode do .NET framework é chamado de Common Intermediate Language (CIL) .
O interpretador (às vezes conhecido como "máquina virtual") da Common Intermediate Language é o .NET Common Language Runtime no Windows e Mono no Linux. Portanto, aplicativos C # não serão executados "nativos" (ou seja, sem um intérprete), nem mesmo no Windows.
Provavelmente, o que mais te surpreende é que o Mono não é instalado por padrão em algumas distribuições do Linux, enquanto o tempo de execução do .NET é.
De qualquer forma, você pode escrever aplicativos em C # que estejam bem integrados ao Ubuntu. Um exemplo é o Tomboy .
Há também um outro idioma, semelhante ao C #, desenvolvido pelo projeto GNOME, que é Vala . Vala é traduzido em C, que é ele próprio compilado, por isso será executado "nativo". Como o Vala foi criado por desenvolvedores do GNOME para desenvolvedores do GNOME, é extremamente fácil de integrar com o ambiente de área de trabalho do GNOME.