Microsoft office не является мультиплатформенным приложением. Если бы вы когда-либо использовали версию для Mac, вы бы знали. Последней мультиплатформенной версией Office была печально известная версия Office 6.0 в 1998 году. В результате пользователи стонали по поводу внешнего вида и осуждали менталитет «портирования».
Версия Office для Mac написана не только другой командой, но и совершенно другим отделом: подразделением Mac, также известным как MacBU. Разные начальники департаментов, разные менеджеры и, я думаю, разные люди, занимающиеся продажами и маркетингом.
Это один из способов сделать это. Также известен как «правильный путь» среди пользователей Mac.
Конечно, не все имеют размер Microsoft и могут позволить себе создать совершенно другую дочернюю компанию только для поддержки пользователей Mac (а тем более пользователей Linux). Немного более разумный способ сделать это - использовать кроссплатформенную библиотеку для графического интерфейса, такого как wxWidgets или QT или GTK. В конце концов, большая часть вашего кода на C не будет сильно меняться на разных платформах, а только на проприетарных вещах, таких как GUI и управление файлами. Черт возьми, вы можете даже использовать вызов функции POSIX для управления файлами и работы в сети для кросс-платформенности. Но будьте осторожны, есть большая вероятность того, что пользователи Mac будут ненавидеть конечный результат (например, что случилось с MS Office 6.0).
Третий путь - это средний путь. Держите общий основной код приложения отдельно от проприетарного графического интерфейса (что в любом случае является хорошей идеей с точки зрения удобства обслуживания). Шаблон проектирования MVC - хороший способ сделать это. Иметь способ (используя #define или другой сценарий сборки / make-файлы) для переключения компонентов View и Controller вашей инфраструктуры MVC. Это то, что Google делает с Chrome. Версия Mac использует встроенную графику Mac, а версия Windows / Linux использует графический движок Skia . Ядром Chrome являются WebKit и V8, которые являются кроссплатформенными.