É o computador que decide o que pode e não pode ser feito. No mesmo hardware, tudo o que é possível em um sistema operacional é possível no outro, a menos que existam obstáculos artificiais. Na verdade, é isso que os sistemas operacionais estão lá para garantir. Contanto que você tenha o Python instalado no Windows, ele pode fazer qualquer coisa que o Python possa fazer no GNU + Linux. Para quase todos os aplicativos, você usará bibliotecas e essas bibliotecas poderão ser programadas em outros idiomas, como C, para eficiência.
Existem duas grandes diferenças entre o Windows e o Ubuntu: 1) O Ubuntu tem suporte embutido para o desenvolvimento em muitos idiomas. Por isso, tudo é projetado para ser acessível usando qualquer idioma. Um bom exemplo é o Unity, no qual tudo é feito no DBus, o que significa que você pode usar qualquer linguagem para controlar o ambiente sem ter bibliotecas especiais, embora isso o torne ainda mais fácil. No Windows, você terá que instalar todos os requisitos manualmente antes de poder usar o aplicativo, mas funciona da mesma maneira.
2) O Ubuntu é um software livre. Isso significa que ninguém tem qualquer incentivo para dizer que uma biblioteca só deve ser usada no Ubuntu. Pelo contrário. Quanto mais desenvolvedores usam uma biblioteca, mais valiosa essa biblioteca se torna. O Windows é muito diferente. Não é apenas um sistema operacional proprietário, de propriedade de uma única entidade, mas as ferramentas de desenvolvimento também são proprietárias e vendidas por essa entidade. Isso significa que eles têm bilhões de incentivos para garantir que os desenvolvedores escrevam aplicativos usando bibliotecas que não podem ou não podem ser facilmente usadas em outros sistemas operacionais. A Microsoft demonstrou boa disposição para mudar, mas ainda tem muitos caminhos a percorrer antes de poder descansar sobre os louros.
Em resumo, se você desenvolver no Ubuntu, seu aplicativo funcionará em qualquer desktop. Você terá que fornecer um instalador se ele deve ser usado no Windows, mas existem programas para automatizar essas tarefas. Se os seus aplicativos dependem da interação direta com o sistema, talvez seja necessário ajustar um pouco o seu código, mas isso não é grande coisa. Isso vai melhorar com o tempo. Por exemplo, já vimos serviços de indicadores para o Windows, o que torna seu AppIndicator escrito para o Ubuntu, aparece automaticamente como um ícone systray do Windows sem esforço do desenvolvedor. Devemos ter uma solução genérica para isso. Se o seu aplicativo depender do DBus para comunicação entre processos, isso também funcionará, já que o DBus já foi portado para o Windows. Queremos um serviço DesktopCouch, etc. Estas não são tecnicamente difíceis, apenas precisam ser feitas, e elas serão.
Eu realmente diria que mesmo que, como desenvolvedor, seu principal alvo seja o Windows, você ainda deve desenvolver esse software no Ubuntu. Além de ser um ambiente muito confortável com todas as ferramentas de que você precisa e uma strong comunidade para apoiá-lo, também garante que você, como desenvolvedor, tenha sempre a liberdade de expandir seu público a qualquer momento, com o mínimo de esforço . Eu particularmente, e muito strongmente, recomendo usar o Python com o GTK3.
Uau, estou muito sem fôlego. :)