Wszystkie procesory obsługujące zestaw instrukcji x64 (znany również jako x86_64 lub amd64) obsługują również zestaw instrukcji x86 (znany również jako i386 lub i686, które są ściśle określonymi wersjami x86). To samo dotyczy ARM A64 (nowy 64-bitowy zestaw instrukcji pojawiający się w ARMv8) i A32 (nazwa „klasycznego” 32-bitowego zestawu instrukcji), dla SPARC64 i SPARC , i wierzę w MIPS64 i MIPS . Tak więc we wszystkich tych rodzinach architektury, jeśli procesor może uruchamiać kod 64-bitowy, może również uruchamiać kod 32-bitowy.
Jądro Linux obsługuje uruchamianie 32-bitowego kodu użytkownika z 64-bitowym jądrem (myślę, że we wszystkich wyżej wymienionych rodzinach architektur). Jądro musi być jednorodne (wszystkie 64-bitowe lub wszystkie 32-bitowe), a każdy proces musi być jednorodny, ale możesz mieć mieszankę 32-bitowych i 64-bitowych procesów na 64-bitowym jądrze. Odwrotna sytuacja nie jest możliwa: w przypadku jądra 32-bitowego nie można uruchamiać procesów 64-bitowych.
Jest to wybór projektowy w systemie Linux, motywowany chęcią uruchomienia istniejących 32-bitowych plików binarnych w 64-bitowych instalacjach. Inne warianty Uniksa dokonały różnych wyborów: Solaris może uruchamiać programy 64-bitowe na jądrze 32-bitowym, a także odwrotnie, podczas gdy OpenBSD nie może uruchamiać programów 32-bitowych na jądrze 64-bitowym.
Możesz uzyskać informacje o procesorze w /proc/cpuinfo. Jeśli twój procesor x86 ma lmflagę, jest to procesor 64-bitowy.
Domyślnie uname -mlub archpokazuje architekturę, dla której jądro zostało skompilowane. Linux może ustawić „osobowość” procesu (z personality) wywołaniem systemowym. Za pomocą polecenia możesz uruchomić podproces w innej osobowości setarch; setarch i686 someprogramlub linux32 someprogramuruchamia określony program w środowisku, w którym uname -mzwraca i686, setarch amd64 someprogramlub linux64 someprogramuruchamia określony program w środowisku, w którym uname -mzwraca amd64.
file /sbin/initmówi dla jakiej architektury initjest skompilowany program. Chociaż możliwe jest mieszanie 32-bitowych i 64-bitowych plików wykonywalnych w instalacji, zwykle wszystkie podstawowe programy systemu operacyjnego mają tę samą architekturę, ponieważ jest o wiele łatwiejsze do zarządzania.
$HOSTYPEjest zmienną bash i mówi, dla jakiej architektury bashzostał skompilowany program.
getconf LONG_BITinformuje, czy domyślny kompilator C jest skonfigurowany do kompilacji programów 32-bitowych czy 64-bitowych. Bardziej precyzyjnym testem jest skompilowanie i uruchomienie programu, który drukuje sizeof(void*)lub sizeof(size_t)- wywołanie getconfmoże dostarczyć tylko informacji o tym, co getconfuważa za domyślny kompilator.