Современные (или, по крайней мере, не слишком старые) операционные системы, такие как Linux, в основном написаны на C и содержат всего несколько строк специфичного для платформы кода сборки.Чтобы портировать на другую архитектуру, такой ассемблерный код должен быть переписан - и это то, что сделано.Но код C можно просто перекомпилировать, его не нужно переписывать.Хотя платформы отличаются по диалекту ассемблера, они построены на одних и тех же понятиях (например, управление памятью на основе страниц через MMU ).Некоторые операции должны выполняться в сборке, потому что переносимый C не предлагает никакого способа их выполнения (например, переключение задач или начальные этапы обработки прерываний), но основная часть того, что делает ОС, - это чистая алгоритмика, это можно сделать в Cнапример, весь сетевой код находится на C; только для самой низкоуровневой части отправки пакета через интерфейс Ethernet требуется не более десятка строк сборки).