Так и быть, рискну сказать: вот у Microsoft никогда не случится такой казус. Это преамбула моей речи для тех, кто готовит свои пафосные тирады о ПО, созданном без профессиональной системы управления разработкой.
На сей раз объектом моего гнева стала даже не Linux, а Apache. Мне нравится Apache. Ну, я люблю её в той степени, в которой можно любить очень симпатичную подружку, которая в подавляющем большинстве случаев ведет себя абсолютно адекватно. Однако наступают моменты, когда она полностью съезжает с катушек, превращаясь в чокнутую дуру, которую обычно только в кино и можно увидеть.
Нас с Apache связывают долгие отношения. Я работал с этим ПО на бесчисленном множестве систем примерно с 1996 г. Я знаю, что у него есть специфические свойства, знаю, что иногда он слишком сложный, но знаю и то, что в конечном итоге у меня всё получится. Ну, во всяком случае в основном.
Windows ему явно нравится меньше, чем Linux, то есть если вам нужно поставить Apache на рабочий сервер, лучше сделать его под Linux. Бывали случаи в разные годы, когда даже в официальной сопроводительной документации было указано, что по определенным причинам Apache менее стабилен и надежен при работе под Windows.
Поэтому даже достигнув невероятных уровней недовольства Linux в течение последних лет, я до сих пор устанавливаю эту ОС на рабочие серверы. Чтобы система обладала адекватным уровнем экономичности, я организовал архитектуру таким образом, чтобы Linux исполнялась на виртуальной машине, а сама виртуальная машина работала на Windows Server 2008 R2. Конечно, любители Linux думают, что это ужасно, но возможность внедрить протокол удаленного рабочего стола в реальную серверную среду, включая полноценный графический интерфейс, и при этом не бороться с ужасного качества документацией и непостоянством конфигураций для каждой функции, — да это просто дар свыше.
Но как бы то ни было, вернемся к моей сегодняшней проблеме с Apache.
Я занимаюсь разработкой на ноутбуке с Windows 7 и затем выгружаю свой код на сервер. Чтобы протестировать свой код в локальной среде, запускаю стек XAMPP WAMP. Эта система работает уже несколько лет.
Мне приходится портировать крупные системы управления контентом, а это требует мгновенной обработки почти сотни тысяч ссылок. Для этого раньше я использовал модуль mod_rewrite в Apache при помощи команды RewriteMap, что позволяет мне запустить скрипт Perl, который читает входящий URL, ищет в базе данных и перенаправляет на конечный URL. Код, разработанный для этой операции, был создан и протестирован на моем стеке XAMPP, прежде чем он был загружен на основной сервер.
Недавно я купил более быстрый ноутбук. Отличный ноутбук. Но на него пришлось перенести все программы, которые у меня были, включая XAMPP. И тогда, не ставя меня в известность, XAMPP обновился с версии 1.7x до версии 1.8. Основное отличие этих версий в том, что 1.8 использует Apache 2.4, а не 2.2, — знаю, знаю, слишком много цифр, но потерпите еще немного.
Мне следовало, конечно, проверить обе версии, но ведь Apache — это все равно Apache? Так? А вот и нет!
Проблема в том, что когда Apache обновился с версии 2.2 до 2.4, изменился принцип работы Rewrite. Раньше в Apache использовали команду под названием RewriteLock, или prn: rewrite code. А теперь используется что-то абсолютно другое, команда Mutex, или взаимного исключения.
Знаю, все кажется очень заумным, поэтому суммирую сказанное: новая версия совершенно аннулирует старую.
Да-да, меня заблокировало обновление Apache.
Сама команда Mod_rewrite практически не задокументирована, информацию о ней можно найти на некоторых хороших сайтах, а остальное овеяно фольклором. У программируемой дополнительной функции RewriteMap документации еще меньше. Но вся имеющаяся документация указывает на необходимость использовать RewriteLock. Ни в одном документе не сказано о Mutex.
Однако сегодня, как только я установил XAMPP на ноутбук и попытался запустить Apache при старых файлах конфигурации, он не запустился. Я покопался, и результатом стало сообщение об ошибке, в котором было написано, что я ничего не знал об этой ситуации с RewriteLock.
Час поисков в Интернете — и вот ответ: функция RewriteLock устарела и была заменена на эту самую ерунду, Mutex. Хоть что-то было по этому поводу сказано в сообщении об ошибке? Нет, конечно. У вас же есть Google.
Но потом стало еще хуже. Вот что говорится об использовании RewriteMap на официальном сайте Apache: “Эта функция использует взаимное исключение rewrite-map, что необходимо для стабильной работы с программой. Механизмы взаимного исключения и блокировка файла могут быть сконфигурированы при помощи команды Mutex”.
Отлично. А вот что написано в документации к обновлению Apache с 2.2 до 2.4: “Команды AcceptMutex, LockFile, RewriteLock, SSLMutex, SSLStaplingMute и WatchdogMutexPath были заменены на единую команду Mutex. Оцените необходимость использования любой из этих устаревших команд в конфигурации 2.2, чтобы определить, можно ли их удалить или они должны быть заменены на Mutex”.
Вот и всё. “Оцените необходимость использования любой из этих устаревших команд”. Спасибо большое!
Думаете, есть какая-то документация, где было бы сказано: “Ну а если вы используете старые команды, кодируйте их так-то”? Нет. Конечно же нет. Потому что это открытое ПО. Просто сами выясняйте.
А может, есть какая-либо переходная функция, чтобы апгрейд не обрушил вам весь сервер? Ну разумеется, нет. Опять же потому что это открытое ПО. Не можете заставить функцию работать — не используйте ее.
Вот что я имею против открытого ПО. В случае с коммерческим продуктом каждой устаревшей функции уделили бы внимание, и для каждой бы был разработан определенный план обновления. В большинстве случаев устаревшие функции даже были бы эмулированы в более новой технологии, чтобы система работала как раньше.
Но в случае с открытым ПО понятие “управление продуктом” не существует. Если есть более совершенная технология или более красивая функция, они просто внедряют их. Даже если при этом нарушится множество хороших конфигураций — не важно. Если это доставит пользователям неудобства или оставит их без малейшего понятия, что делать дальше, ну и что? И вообще, если вы действительно хотите знать, как что работает, код открыт для всех -- идите и читайте.
Да это просто безумие. Но в такой обстановке вынуждены работать многие ИТ-менеджеры. Не удивительно, что многие сайты функционируют на устаревших технологиях. Обновления могут все испортить.
Что же касается меня, то я скачаю и установлю старую версию XAMPP. Для ноутбука, на котором я программирую, это неважно. Но мне только что пришло уведомление, что я не могу обновить рабочие серверы до Apache 2.4, не выяснив каким-либо образом, как заставить свою сложную систему исполнения rewrite работать в абсолютно новой — и никак не задокументированной — манере.
А люди еще удивляются, почему я такой злой. Часы потрачены на то, чтобы хотя бы сохранить то, что было.
P.S. Причина того, почему я не использую сервер IIS (а я пытался), состоит в нестабильной работе на нем WordPress и PHP. Серьезно, если вам нужно, чтобы WordPress работал устойчиво и с полной поддержкой, вам нужен LAMP. Но это не значит, что он мне во всем нравится. Хи-хи.