ROS Blog The cost of progress
Цена прогресса
Оригинал статьи - http://www.reactos.org/node/653
Дата публикации оригинальной статьи - 21.05.2013
Автор оригинальной статьи - Цзылян Гуо
Проекту довольно часто поступают предложения, которые выдвигающие их простые пользователи считают "улучшениями" каких-либо функций ReactOS по сравнению с Windows. В принципе это очень хорошо, однако не стоит забывать, что люди редко осознают все возможные последствия реализации того, что они просят. В последнее время увеличился поток просьб о внесении "улучшений" в оболочку, отчасти это связано с повышением в последнее время к ней внимания со стороны разработчиков и пользователей. Рассмотрим, например, просьбу о реализации поддержки запуска приложений на полный экран. В Windows, поддержка полноэкранного режима должна быть встроена в само приложение, что требует усилий по созданию этой поддержки со стороны самого разработчика. В результате некоторые приложения поддерживают полноэкранный режим, некоторые - нет. И вот, некоторые люди предлагают ввести в ОС функциональность, позволяющую пользователю запускать приложения в полноэкранном режиме вне зависимости от того, поддерживает ли приложение работу в полноэкранном режиме, или нет. Это, однако, несёт за собой несколько взаимосвязанных проблем. Прежде всего всё, что может сделать пользователь, может сделать и программа. Здесь имеется ввиду, что если в ОС вдруг появится функция запуска приложений на полный экран, то ничто не мешает самой программе пользоваться этой функцией. В этом, разумеется, нет ничего плохого, но это лишь до тех пор, пока люди понимают, что эта конкретная функция никогда на входила в состав Win32 API и не является его частью. Именно поэтому проект никогда не станет заниматься реализацией этой или какой-либо другой нестандартной функции ОС, ведь это может привести к невольному созданию форка Win32 API, и это останется на нашей ответственности. Microsoft уже наступала на этот капкан, когда сторонние разработчики покопались во внутренностях Win32 API и обнаружили множество скрытых от посторонних глаз функций. Итогом этого являются проблемы совместимости, когда для сохранения совместимости со старыми приложениями в каждой новой версии Windows приходится эмулировать ошибки и особенности поведения предыдущих версий системы. Проект также уже сталкивался с далеко не самой приятной задачей по добавлению в код ReactOS "костылей", и более этим заниматься мы бы не хотели, к тому же при этом существует риск того, что разработчики могут получить возможность написать такие приложения, которые смогут без проблем работать в ReactOS, но не будут запускаться в Windows. Если пользователи захотят установить какое-либо стороннее приложение, реализующее такую функциональность, то мы, разумеется, не будем их останавливать. Мы всего лишь не хотим, чтобы сторонние программисты предполагали наличие в системе такой функциональности "по умолчанию".
Ещё одной просьбой об изменении стандартного функционала ОС была просьба о создании альтернативной реализации имеющейся на данный функции переключения работающих приложений по alt-tab, представляющая собой простой текстовый список запущенных приложений. Это уже более осуществимо, поскольку разработка этой функции не потребует вмешательства в код, ответственный за запуск/выполнение и вывод на экран системных и пользовательских приложений. Потребуется лишь добавить дополнительный код, ответственный за дополнительную функциональность подпрограммы обработки alt-tab, находящейся в коде оболочки ОС. Весь вопрос заключается в том, на чьи, собственно, плечи возложить вывод на экран этого списка: на библиотеку shell32 или на сам Проводник? Если делать также, как уже сделано сейчас, то для реализации такого функционала необходимо пользоваться лишь теми функциями, которые уже имеются в shell32, в противном случае мы столкнемся с необходимостью дополнения существующего API, и, соответственно, с проблемой, о которой рассказано чуть выше. Если добавлять код в Проводник, то всё становится проще, поскольку Проводник представляет собой всего лишь простое приложение, и мы можем править и дополнять его код сколько душе угодно, не опасаясь последствий.
За каждую реализацию в ReactOS функции, которой нет в Windows, необходимо заплатить определённую цену, но многие люди, похоже, этого не осознают. Необходимо ясно понимать, что единожды сделав исключение, можно создать прецедент для новых исключений в будущем, включая даже те исключения, которые могут просто "поломать" работу тех функций, которые необходимы самому просящему это исключение. Так что перед тем, как просить добавления какой-либо новой функции в ReactOS, спросите себя, готовы ли вы взамен лишиться чего-либо из того, что уже работает? Если ответом будет "нет", то вы ещё на шаг приблизились к пониманию того, почему у Microsoft имеется настолько много проблем при добавлении каких-либо улучшений в новые версии Windows.