Необычный способ сделать форк
Иногда по мере изучения разных технологий, мы сталкиваемся с довольно странными и, с первого взгляда, бредовыми решениями, особенно если речь идет о Minecraft.
В среде Minecraft существует огромное множество различных серверных ядер, но самым популярным из них остается Paper, который основан на ядре Spigot, который основан на CraftBukkit, который основан на официальном ядре. Цепочка зависимости не большая, но главный вопрос: что значит "основан"?
Было бы слишком просто, если бы речь шла об обычных форках, но нет, тут все куда интересней. Эти ядра наследуют друг друга используя "патчи", которые представляют собой git diff. То есть, чтобы собрать, например CraftBukkit, берется код оригинального ядра Minecraft, в него вносятся изменения, далее эти изменения фиксируются с помощью git diff в отдельные файлы, называемые патчами. В репозиторий попадают именно эти патчи, а во время сборки они применяются на оригинальное ядро.
Звучит как переусложнение, но есть несколько причин, по которым такой подход имеет практический смысл.
Первая причина - лицензия. В git репозиторий нельзя залить код оригинального ядра, это нарушение лицензии, а подход с патчами позволяет обойти данное ограничение.
Вторая причина - разработчики посчитали, что с такой системой будет легче вносить изменения и принимать обновления ядра. С этим, честно говоря, я не совсем согласен и не понимаю, что в этом простого.
Вот так иногда разработчикам приходится извращаться, чтобы справится с разными ограничениями. А какие Вы знаете случаи нестандартных решений, обусловленных ограничениями?