Nelle distribuzioni mainstream basate su Linux, la versione di amd64 è completamente alla pari con quella di x86, quindi, per quanto riguarda la disponibilità del software, non c'è niente da temere in entrambi i casi (a parte alcuni oscuri specifici della piattaforma). Inoltre, è possibile, anche se con qualche hacking grave, per eseguire codice a 32 bit su un kernel a 64 bit, quindi se è assolutamente necessario, ci sono probabilmente dei modi per farlo. E se tutto il resto fallisce, puoi sempre installare una macchina virtuale a 32 bit da compilare per quella particolare architettura.
Per quanto riguarda le prestazioni della CPU, non c'è molta differenza in entrambi i casi: alcune applicazioni traggono vantaggio dalle operazioni a 64 bit (in genere, queste sono applicazioni che devono gestire interi di grandi dimensioni e simili); altri non ottengono alcun beneficio e potrebbero persino eseguire un po 'più veloce su un kernel a 32 bit, specialmente se devono gestire molti interi o puntatori a dimensione nativa (che occupano il doppio dello spazio su un 64 bit) la piattaforma).
Tuttavia, se vuoi utilizzare più di 4 GB di RAM, i kernel a 32 bit comportano una vera penalizzazione delle prestazioni, perché devi utilizzare PAE per farlo accadere.
Come regola generale, in questi giorni direi andare con 64 bit, a meno che non ci siano forti motivi per non farlo, in particolare:
- stai utilizzando librerie a 32 bit che non puoi ricompilare su una piattaforma a 64 bit (ad esempio perché non hai i sorgenti)
- devi utilizzare un pacchetto dalla tua distribuzione che non è incluso nella distribuzione a 64 bit e non può essere installato da altre fonti attendibili
- sei a corto di RAM fisica (molti programmi usano meno RAM su sistemi a 32 bit e "short on RAM" significa invariabilmente "meno di 4 GB")
- stai codificando per sistemi di produzione a 32 bit (vuoi eliminare quante più differenze possibili, ad esempio, la funzione
ip2long
di PHP ha un pungente trucco che si mostra solo sui sistemi a 32 bit)