За последний год я очень много говорил о Symfony 3.0 на разных конференциях. Я думал о наилучшей стратегии для этой версии уже давно, и теперь настало время поделиться моими мыслями со всеми.
Некоторые разработчики и большинство менеджеров проектов боятся обновлений мажорных версий используемых ими проектов с открытым исходным кодом. Наверное, это из-за того, что мажорные версии ассоциируются с потерей обратной совместимости. Возникает много вопросов: принесут ли изменения пользу моему проекту? Достаточно ли ясны планы разработчиков, чтобы был смысл обновляться? Будет ли обновление легким? Что, если я не могу или не хочу обновляться? И так далее.
Страх перед мажорными версиями растет своими корнями из нашего прошлого: вспомните Perl 6 или PHP 6. В мире Symfony вторая версия тоже была революционной по сравнению с symfony 1. Я понимаю, почему люди нервничают, когда слышат о третьей версии, и именно в этом посте я расскажу, почему вам не нужно паниковать.
Во-первых, все знают, что обновления как мажорных, так и минорных версий должны происходить регулярно. Мы должны иметь возможность ломать обратную совместимость, чтобы удалять неактульный функционал, исправлять ошибки архитектуры и учитывать изменения в экосистеме, такие как новые возможности PHP, новые методологии разработки, новые парадигмы веба. Интернет-среда очень быстро эволюционирует, и если мы не будем адаптировать к ней Symfony, она станет неактуальна намного быстрее, чем вам кажется.
Как менеджер проекта Symfony я отвечаю за то, чтобы код был максимально стабильным как можно дольше. Но стабильность — это не статус-кво: мы добавляем возможности и исправляем архитектурные недочеты и в минорных релизах, как вы могли заметить на примере версий 2.4, 2.5 и 2.6. Все эти версии добавляли функционал в фреймворк, и каждая из них была заметным шагом вперед для самого фреймворка. Но обновляться было просто из-за того, что сохранялась обратная совместимость. Проблема — в сохранении обратной совместимости для устаревших или неактуальных фич (и я даже не говорю о производительности!). Для Symfony 2 это было достаточно просто, потому что она построена на крепкой базе из независимых компонентов. По определению семантического версионирования, новая мажорная версия — это просто очередной шаг, на котором мы можем подчистить код и избавиться от хлама.
Что такое Symfony 3.0?
Поскольку новые фичи постоянно добавляются в минорных версиях, а устаревшие помечаются как таковые, вы можете начать улучшать совместимость вашего кода с Symfony 3.0 уже сегодня. Прочитайте руководство по обновлению и выполните предлагаемые изменения, это позволит вам заранее подготовиться к миграции.
Как вы, наверное, уже догадались, в Symfony 3.0 не будет кардинально меняться низкоуровневая архитектура, и релиз не будет революционным. Вот примеры некоторых изменений в Symfony 2.x, которые сделают 3.0 еще лучше:
Избежать паники по поводу новых мажорных версий можно, если сообщать о своих намерениях как можно раньше. Вот именно поэтому сообщество Symfony так тщательно задокументировало нашу стратегию, от обещаний обратной совместимости до roadmap'a и релизов с расширенной поддержкой.
Один из способов минимизировать страх перед новыми версиями — это сделать их предсказуемыми. Согласно нашему графику релизов, Symfony 2.7, которая должна выйти в мае 2015, будет следующим релизом с длительной поддержкой, которая продлится до мая 2018 года по багфиксам и до мая 2019 года по обновлениям безопасности. Вместо того, чтобы планировать следом 2.8, я предлагаю перескочить прямо к 3.0. Так что 3.0 будет выпущена в ноябре 2015 года, и первым релизом с расширенной поддержкой в ветке 3.x будет 3.3, которая выйдет в мае 2017.
Интерактивный график релизов также был обновлен с учетом ветки 3.0.
Что вам делать? Согласно главе документации о процессе релизов, есть две стратегии обновления:
Чтобы всем было проще помогать разработке Symfony 3.0 уже сейчас, master-ветка главного репозитория теперь отводится под 3.0, а для 2.6 и 2.7 мы создали отдельные ветки.
Если ваш проект использует master-ветку Symfony, чтобы следить за развитием 2.x, переключитесь на 2.7 сегодня.
Стратегия слияния изменений будет почти такой же, как сейчас, за исключением некоторых изменений:
Наконец, что с минимальной версией PHP? Несколько дней назад я проводил опрос на эту тему, и результаты таковы:
На основании этих результатов я предлагаю сделать PHP 5.5 минимальной поддерживаемой версией для Symfony 3.0. Я хочу сохранить возможность поднять это требование до PHP 5.6 где-то в следующем году, но точная дата будет зависеть от наших потребностей и поддержки новой версии хостерами и дистрибутивами ОС.
Есть много простых изменений, которые можно реализовать в Symfony 3.0 уже сегодня. В первую очередь в ветке 2.7 все устаревшие возможности должны сообщать о себе в лог. В master-ветке эти возможности должны быть удалены. И наконец, руководство по обновлению должно быть протестировано и доработано так, чтобы обновляться было легко и просто. Также вы можете посмотреть на тикеты, протегированные как 3.0 на Гитхабе.
Хорошего вам кода!
Мажорные версии
Некоторые разработчики и большинство менеджеров проектов боятся обновлений мажорных версий используемых ими проектов с открытым исходным кодом. Наверное, это из-за того, что мажорные версии ассоциируются с потерей обратной совместимости. Возникает много вопросов: принесут ли изменения пользу моему проекту? Достаточно ли ясны планы разработчиков, чтобы был смысл обновляться? Будет ли обновление легким? Что, если я не могу или не хочу обновляться? И так далее.
Страх перед мажорными версиями растет своими корнями из нашего прошлого: вспомните Perl 6 или PHP 6. В мире Symfony вторая версия тоже была революционной по сравнению с symfony 1. Я понимаю, почему люди нервничают, когда слышат о третьей версии, и именно в этом посте я расскажу, почему вам не нужно паниковать.
Во-первых, все знают, что обновления как мажорных, так и минорных версий должны происходить регулярно. Мы должны иметь возможность ломать обратную совместимость, чтобы удалять неактульный функционал, исправлять ошибки архитектуры и учитывать изменения в экосистеме, такие как новые возможности PHP, новые методологии разработки, новые парадигмы веба. Интернет-среда очень быстро эволюционирует, и если мы не будем адаптировать к ней Symfony, она станет неактуальна намного быстрее, чем вам кажется.
Как менеджер проекта Symfony я отвечаю за то, чтобы код был максимально стабильным как можно дольше. Но стабильность — это не статус-кво: мы добавляем возможности и исправляем архитектурные недочеты и в минорных релизах, как вы могли заметить на примере версий 2.4, 2.5 и 2.6. Все эти версии добавляли функционал в фреймворк, и каждая из них была заметным шагом вперед для самого фреймворка. Но обновляться было просто из-за того, что сохранялась обратная совместимость. Проблема — в сохранении обратной совместимости для устаревших или неактуальных фич (и я даже не говорю о производительности!). Для Symfony 2 это было достаточно просто, потому что она построена на крепкой базе из независимых компонентов. По определению семантического версионирования, новая мажорная версия — это просто очередной шаг, на котором мы можем подчистить код и избавиться от хлама.
Что такое Symfony 3.0?
Поскольку новые фичи постоянно добавляются в минорных версиях, а устаревшие помечаются как таковые, вы можете начать улучшать совместимость вашего кода с Symfony 3.0 уже сегодня. Прочитайте руководство по обновлению и выполните предлагаемые изменения, это позволит вам заранее подготовиться к миграции.
Как вы, наверное, уже догадались, в Symfony 3.0 не будет кардинально меняться низкоуровневая архитектура, и релиз не будет революционным. Вот примеры некоторых изменений в Symfony 2.x, которые сделают 3.0 еще лучше:
- Совместимость со стандартами улучшена (мы используем логгер из PSR-3 и убрали интерфейс Symfony\Component\HttpKernel\Log\LoggerInterface)
- В Symfony 3.0 исправлены некоторые архитектурные ошибки (консольные хелперы, хранящие состояние, заменены лучшими альтернативами, напр. ProgressBar / ProgressHelper или Table / TableHelper; Yaml::parse() больше не принимает имена файлов)
- Symfony 3.0 еще более распределена и реюзабельна. HttpKernel будет разделен на несколько меньших модулей, например, профайлер будет отделен, классы будут перемещены из бандлов в компоненты, компоненты выделены из уже существующих...)
График выхода Symfony 3.0
Избежать паники по поводу новых мажорных версий можно, если сообщать о своих намерениях как можно раньше. Вот именно поэтому сообщество Symfony так тщательно задокументировало нашу стратегию, от обещаний обратной совместимости до roadmap'a и релизов с расширенной поддержкой.
Один из способов минимизировать страх перед новыми версиями — это сделать их предсказуемыми. Согласно нашему графику релизов, Symfony 2.7, которая должна выйти в мае 2015, будет следующим релизом с длительной поддержкой, которая продлится до мая 2018 года по багфиксам и до мая 2019 года по обновлениям безопасности. Вместо того, чтобы планировать следом 2.8, я предлагаю перескочить прямо к 3.0. Так что 3.0 будет выпущена в ноябре 2015 года, и первым релизом с расширенной поддержкой в ветке 3.x будет 3.3, которая выйдет в мае 2017.
Интерактивный график релизов также был обновлен с учетом ветки 3.0.
Что вам делать? Согласно главе документации о процессе релизов, есть две стратегии обновления:
Режим двойной поддержки был придуман, чтобы сделать каждого пользователя Symfony счастливым. Для тех, кто хочет работать с самым свежим и крутым, есть стандартная версия, которая выходит раз в полгода, и два месяца выделяются на обновление. Для тех, кому нужна стабильность, есть версия с расширенной поддержкой: новая версия выходит каждые два года, и год дается на обновление.
Где взять Symfony 3.0?
Чтобы всем было проще помогать разработке Symfony 3.0 уже сейчас, master-ветка главного репозитория теперь отводится под 3.0, а для 2.6 и 2.7 мы создали отдельные ветки.
Если ваш проект использует master-ветку Symfony, чтобы следить за развитием 2.x, переключитесь на 2.7 сегодня.
Стратегия слияния изменений будет почти такой же, как сейчас, за исключением некоторых изменений:
- Новый функционал будет добавляться в 2.7, если это не будет приводить к потере совместимости, или если изменения не влияют на существующий код
- Новые фичи будут добавляться в 3.0, если не будет способа заставить их работать в 2.7
- Исправления багов по-прежнему будут добавляться в самую старую поддерживаемую ветку и в новые ветки (и 3.0 тоже) регулярно
Минимальная версия PHP для Symfony 3.0
Наконец, что с минимальной версией PHP? Несколько дней назад я проводил опрос на эту тему, и результаты таковы:
На основании этих результатов я предлагаю сделать PHP 5.5 минимальной поддерживаемой версией для Symfony 3.0. Я хочу сохранить возможность поднять это требование до PHP 5.6 где-то в следующем году, но точная дата будет зависеть от наших потребностей и поддержки новой версии хостерами и дистрибутивами ОС.
Как помочь?
Есть много простых изменений, которые можно реализовать в Symfony 3.0 уже сегодня. В первую очередь в ветке 2.7 все устаревшие возможности должны сообщать о себе в лог. В master-ветке эти возможности должны быть удалены. И наконец, руководство по обновлению должно быть протестировано и доработано так, чтобы обновляться было легко и просто. Также вы можете посмотреть на тикеты, протегированные как 3.0 на Гитхабе.
Хорошего вам кода!