A execução de aplicativos de 64 bits requer algum suporte do kernel: o kernel precisa, pelo menos, configurar tabelas de páginas, interromper tabelas etc. conforme necessário para suportar a execução de código de 64 bits na CPU e precisa salvar Contexto de 64 bits ao alternar entre aplicativos (e de aplicativos para o kernel e vice-versa). Assim, um kernel puramente de 32 bits não é compatível com o espaço do usuário de 64 bits.
No entanto, um kernel pode executar código de 32 bits no espaço do kernel, enquanto suporta código de 64 bits no espaço do usuário. Isso envolve um tratamento semelhante ao suporte necessário para executar aplicativos de 32 bits com um kernel de 64 bits: basicamente, o kernel precisa suportar as interfaces de 64 bits que os aplicativos esperam. Por exemplo, ele precisa fornecer algum mecanismo para o código de 64 bits para chamar o kernel e preservar o significado dos parâmetros (em ambas as direções).
A questão, então, é se vale a pena. No Mac e em alguns outros sistemas, um caso pode ser feito, pois o suporte ao código do kernel de 32 bits significa que os drivers não precisam fazer a troca simultaneamente. No Linux, o modelo de desenvolvimento é diferente: qualquer coisa no kernel é migrada conforme necessário quando grandes alterações são feitas, e qualquer coisa fora do kernel não é realmente suportada pelos desenvolvedores do kernel. Suportar userland de 32 bits com um kernel de 64 bits é certamente útil e vale a pena o esforço (pelo menos, foi quando o suporte x86-64 foi adicionado), não tenho certeza se há um caso a ser feito para 64 bits em 32 -bit ...