Do not hack MediaWiki core/ru

While hacking MediaWiki core is often a solution proposed on other MediaWiki support forums, it is not an ideal solution. Generally, it will cause you more problems than it solves and will only make future upgrades more difficult to install.

For the purposes of this essay, "core" is meant to include all files that belong to the original MediaWiki installation. That is to say all files except LocalSettings.php, the ones in your "extensions" folder, or other folders which you have added since your installation.

Почему вам не следует изменять файлы ядра
Вне зависимости от того, насколько просто будет модифицировать MediaWiki так, чтобы она делала то, что вы хотите, не поддавайтесь искушению.


 * Сделав это, вы усложните ядро. Будет трудно, или даже почти невозможно устанавливать обновления, направленные на улучшение безопасности и исправление ошибок.
 * Вы осложните жизнь тем, кто после вас будет заниматься поддержкой сайта.
 * Вероятно, вы оставите свой сайт уязвимым для эксплойтов.
 * Другие разработчики будут менее благосклонно помогать вам, если вы взломаете своё ядро - нет другой причины, которая бы сделала понимание того, что вы сделали, настолько сложным.

Ядро MediaWiki было разработано с целью иметь модульную структуру, поэтому нет нужды взламывать его. Если есть какая-то функция, которая нужна вам и которая может быть реализована только модификацией ядра, рассмотрите возможность создать расширение, или предложите ваш хак в качестве патча. Отправьте сообщение об ошибке и расскажите сообществу о функции, которую вы хотите реализовать. Затем она будет протестирована, и ваша функция сможет стать частью ядра MediaWiki.

Проблемы, с которыми сталкиваются Вики-проекты со сломанным ядром

 * Время обновления MediaWiki возрастает с 30 минут до 6 часов, а то и 6 недель, если ваше изменение касается 13650 строк.
 * Возрастает число спам- и других нежелательных атак из-за возникших дыр в безопасности.
 * Отсутствуют новые функции из-за конфликтующих изменениях в файлах ядра.
 * Inability to use MediaWiki.org documentation - all of which has been written under the assumption that you have not hacked your core files (unless of course you write documentation specifically for how to operate MediaWiki when that particular hack is being used)
 * Repetition of the original problem - as a bug report is a for more reliable way to solve a problem than a core hack - if for no other reason than a group of developers will be looking into the problem and may discover necessary code changes you missed
 * Complaining to developers about your core files not working - and not finding much sympathy - if you hack core files - effective technical support is all but impossible

Исключения
Есть ли исключения для этого правила?

Не-а.

Okay, very very rarely. But this is generally for specific wikis or implementations by people who are extremely familiar with the MediaWiki code base, development practices and security model. Those who properly document their changes and practice proper revision control with their code. If you have to ask, chances are you shouldn't.

Расширения
Note that most of this page also applies to important extensions. It's a bad idea to directly start hacking the Semantic MediaWiki extensions, or any of the extensions used on Wikipedia and other Wikimedia sites.

An exception could be if an extension is mainly installed by copying its code from this wiki (instead of getting it from a software repository). It means it's not very seriously maintained.

What to do instead
Rather than hacking MediaWiki core, there are several alternative solutions to consider, more or less in this order:


 * 1) MediaWiki is a powerful beast out of the box, you can do a lot with MediaWiki's interface messages such as MediaWiki:Sidebar and many many others, see also other pages on this wiki for e.g. JavaScript and CSS additions and changes.
 * 2) Develop an extension to accomplish what your hack was intended to do, or simply use one of the existing hooks
 * 3) Submit a bug report
 * 4) Contribute your improvement to core to the code repository so others can benefit from your fix