Bien que certaines personnes considèrent / traitent la portabilité, le respect des normes, etc., comme moralement supérieure, ou quelque chose du même ordre, cela revient en réalité à des considérations économiques.
L'écriture de code portable a un coût en termes d'effort pour le rendre portable, et (souvent) renonce à certaines fonctionnalités qui ne sont pas disponibles sur toutes les cibles.
Le code non portable a un coût en termes d'effort de transfert du code lorsque vous vous souciez d'une nouvelle architecture et (souvent) de renoncer à certaines fonctionnalités qui ne sont pas (ou n'étaient) pas disponibles sur la cible d'origine.
Le gros qualificatif est "quand / si vous vous souciez d'une nouvelle architecture". L'écriture de code portable nécessite des efforts immédiats dans l' espoir d'un gain éventuel de pouvoir utiliser ce code sur des architectures nouvelles / différentes avec peu d'effort, voire aucun effort. Le code non portable vous permet de retarder cet investissement dans le portage jusqu'à ce que vous soyez (au moins raisonnablement) certain que vous devez vraiment porter le portage vers une cible particulière.
Si, dès le départ, vous êtes certain de cibler un grand nombre d'objectifs, il vaut généralement la peine d'investir dès le départ pour réduire les coûts de portage à long terme. Si vous n'êtes pas certain de la quantité (ou même de la nécessité) du portage du code, écrire du code non portable permet de minimiser les coûts initiaux, de retarder voire d'éviter complètement le coût de la transférabilité du code.
Je pense qu'il est également intéressant de noter que j'ai parlé de "portable" et de "non-portable" comme s'il y avait une division nette entre les deux. En réalité, ce n'est pas vrai - la portabilité est un continuum allant de non totalement portable (code d'assemblage, par exemple) à extrêmement portable (par exemple, Info-zip) et partout entre les deux.