Linux с самого начала был написан очень портативно. Он работает на целом ряде машин с очень разными процессорами, и писать его портативным способом считается хорошим вариантом, так что, например, сопровождающий пакета может легко перенести вашу программу на какой-нибудь встроенный ARM, Cygwin или Amiga, или ...
Так что, да, модель "только" специфична для кросс-компиляции, но фактически каждая компиляция в Linux - это (вариант) кросс-компиляции, просто по умолчанию build, host и target автоматически устанавливаются на то же значение, что и машина, на которой вы работаете.
Тем не менее, даже тогда вы можете взять скомпилированный компилятор Linux-i386, исходные коды для него и "кросс-компилировать" его для Linux-amd64. И полученный двоичный файл будет работать намного быстрее на 64-битном процессоре.
Это довольно важно во встроенном программировании. Главным образом из-за того, что вы пишете программы для слабых процессоров, которые не способны запускать компилятор или будут запускать его с минимальной скоростью. Таким образом, вы берете кросс-компилятор на быстром процессоре (скажем, на нескольких многоядерных процессорах Intel) и кросс-компилируете для встроенного процессора (скажем, на некоторых младших ARM).
"В другой среде" все складывается очень мягко. То, что вы делаете, когда кросс-компиляция для встроенного - это работа с совершенно другим набором команд, разными режимами доступа к памяти, разными методами доступа к ресурсам и так далее, и так далее. Машина совершенно другой конструкции, чем сборка хозяина. Ваш хост сборки может быть ПК с Windows, на котором запущен Cygwin. Ваша цель может быть чип внутри смартфона. Двоичный файл не будет иметь ничего общего с файлами Cygwin .exe.
Как прямое следствие, -everything- должен быть скомпилирован для цели с нуля. Ядро, системные утилиты, системные библиотеки, все инструменты, на которых должен работать целевой объект. Дело в том, что если целью является киоск по продаже билетов, на самом деле нет смысла кросс-компилировать Eclipse, GCC и Gnome, а затем разрабатывать в «локальной» среде, печатая свой код на клавиатуре билетной кассы. Вместо этого вы просто кросс-компилируете основы ОС и ваши конкретные приложения. Вы сохраняете среду разработки на сборочной машине и кросс-компилируете все, что вам нужно, на встроенном устройстве.
[на практике вы получаете дистрибутив Linux для цели и просто компилируете все, что вам нужно изменить].