Бинарники нам ничем не помогут. Кроссплатформенная разработка привносит некоторые сложности, в том числе и поиск нужного файла. Это легко решается в сборочных скриптах или проектах, но это для сборки, когда файл всегда один, под конкретную платформу. Если же мы занимаемся разработкой, то всегда должны учитывать наличие некоторого количества поддерживаемых платформ.  И ответ на вопрос, какой файл открывать - Windows.Module.Mod или Linux.Module.Mod, а может AMD64.Module.Mod - мы не получим. Можно, конечно, использовать некие соглашения или префиксы, и открывать конкретный файл в зависимости от того, на какой платформе работаем - если это Windows, то и пытаться открыть Windows.Module.Mod. Однако, у такого подхода есть существенные недостатки. А вдруг это общий модуль, и у него просто нет префиксов, или он общий для нескольких платформ, а для какой-то конкретной - отдельный, с префиксом. Ни и самое главное, как тогда разрабатывать в Windows для нативной A2, учитывая несколько архитектур процессора? да и для других хостов? Ведь тогда мы не сможем перейти в файл нужной нам реализации.
Поэтому все эти умолчания и подразумеваемые схемы именования ничего не решают, скорее наоборот.
Запихивание всё в один файл и использование директив условной компиляции также мало помогает, вообще в исходниках заблудишься. И ещё момент о директивах условной компиляции - като раз я решил проект отрефакторить в одной распространенной ide, там как раз были директивы, так оно вод текущую платформу переименовало, а под другие - нет, ну а что, участки кода не активные же.
То есть у всех методик одни и те же проблемы -  отсутствие доступа к исходникам модуля отличной от текущей платформы. Лично для меня более правильным подходом было бы открытие всех программных модулей, относящихся к имени объектного модуля. То есть в ide должны открываться всё файлы по маске содержащей имя объектного модуля. А ещё лучше было бы наличие спецификации модуля.