>>Java написан на Java.
>На С++, вообще-тоJVM, которую ты принимаешь за Java, HotSpot? Ну да, написана. Что не исключает реализаций на других языках программирования, в том числе на Java - см. проект Jikes RVM, чуть больше 8 МБ в исходниках.
>нативный код в любом случае надо линковать, и это не имеет ни малейшего отношения к языку программирования и понятию "модульность".
Нет. Сишники подсели на линкер, как никто другой - динамическое связывание бинарного кода (пр загрузке программы/библиотек в память и выполнении) в их программах зависит от применяемого редактора связей (ld). При малейшей изменчивости среды исполнения (CC-RT ABI) надо перекомпилировать ВСЕ установленные программы на C/C++. Как мы знаем, удобство использования модульной архитектуры заключается в возможности обновления (замены) модуля, без необходимости изменения остальной системы. (Роль модулей могут играть структуры данных, библиотеки функций, классы, сервисы и др. программные единицы, реализующие некоторую функциональность и предоставляющие интерфейс к ней.) Почему-то программы на Java без завязок на особенности операционной системы не нуждаются в перекомпиляции даже при обновлении версии JVM. А всё из-за того, что модульность в программах и большая автономность бинарного кода от среды исполнения позволяют не заниматься лишней ерундой с заголовочными файлами (особенно тогда, когда их нет) - то есть на уровне исходников модульности в программах на C/С++ уже нет - они все завязаны на линковщик. И так продолжается 45 лет.