Законотворчество и программирование: заметка об интерпретации текстов

Все юристы работают с текстами. Читают, пишут, изучают, трактуют, убеждают в своих трактовках. Программисты — работают с текстами. Читают, пишут. Убеждают компилятор в своей правоте. Я — разработчик. Я пишу много текста, вроде такого:

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Этот текст пишется по некоторым правилам, а потом компилятор его разбирает. Хорошо бы знать правила, чтобы компилятор понял всё правильно. При составлении иска в суд тоже хорошо бы знать правила. К сожалению, в праве нет такие четких правил, как у компилятора, но есть всё-таки какие-то общие правила, которых придерживаются интерпретаторы.

Иногда мне приходится писать или читать тексты юридические — заявления, жалобы, иски. Писать жалобы про парковки на газоне или готовить тридцатистраничные иски в суд. В процессе погружения в право я подмечаю некие аналогии с программированием. О них-то я и хочу рассказать.

Переменные

В программировании всё начинается с переменных. В тексте юридическом обычно значение слов известно заранее (а кстати, значений у них может быть много, но это другая история), но можно вводить и переменные:

Статья 24.7 Федерального закона от N89-ФЗ «Об отходах производства и потребления» (далее — закон N89-ФЗ) предполагает, что региональные операторы заключают договоры на оказание услуг по обращению…
…На основании закона N89-ФЗ прошу того-то и того-то.
В данном случае мы в начале текста вводим переменную — закон N89-ФЗ (такие переменные всегда final), и можем её использовать дальше.

В пользоветльском соглашении habr.com все переменные объявляются в первом разделе перед основным текстом:
1.1. В настоящем документе и вытекающих или связанных с ним отношениях Сторон применяются следующие термины и определения:
Соглашение — настоящий документ со всеми дополнениями, изменениями и указанными в нем обязательными документами, а также договор, заключенный на его основании.
Пользователь — дееспособное физическое лицо старше 18 лет, присоединившееся к настоящему Соглашению в собственном интересе либо выступающее от имени и в интересах представляемого им юридического лица.
И так далее.

Если переменные не определены, то могут возникнуть проблемы:

public static void main(String[] args) throws IOException {
    System.out.println(hello);
}
java: cannot find symbol
  symbol:   variable hello

В примере выше нам везёт — нам об ошибке скажет компилятор. Но в праве нет компилятора:

УК РФ Статья 43. Понятие и цели наказания:
1. Наказание есть мера государственного принуждения, назначаемая по приговору суда. Наказание применяется к лицу, признанному виновным в совершении преступления, и заключается в предусмотренных настоящим Кодексом лишении или ограничении прав и свобод этого лица.
2. Наказание применяется в целях восстановления социальной справедливости, а также в целях исправления осуждённого и предупреждения совершения новых преступлений.

Когда читаешь этот текст, сразу возникает неоднозначность, ведь используется неопределённая переменная: социальная справедливость. Что это? Убийство за убийство? Зуб за зуб? А может, посчитаем справедливость в рублях? Есть ли уверенность, что два интерператотора будут понимать это одинаково?
Кстати, тут есть ещё кое-что интересное: предупреждение совершения новых преступлений. Самый простой и гарантированный способ предупреждения совершения новых преступлений — смертная казнь. Тогда цель выполняется полностью: процент рецедивов будет нулевым. Но то ли имелось ввиду при написание текста закона? Ведь используются другие методы предупреждения, и причины их использования остаются вне этого текста.

Плагины и бланкетные нормы

Бланкетная норма — это норма, предоставляющая государственным органам, должностным лицам право самостоятельно устанавливать правила поведения в определённых рамках. К примеру, Федеральный закон N 196-ФЗ «О безопасности дорожного движения» устанавливает полномочия государственных органов, давая им право устанавливать правила дорожного движения (определим в этом тексте переменную, будем называть правила дорожного движения покороче — ПДД). В свою очередь, постановлением правительства (то есть уже не законодательного, а исполнительного органа) устанавливаются ПДД. Ещё есть глава 12 КоАП, которая устанавливает санкции (и процедуру их применения) за нарушения ПДД. Таким образом, имея закон N 196-ФЗ и КоАП, можно менять ПДД хоть каждый день, не меняя при этом тексты законов (постановление правительства законом не является).

a0d47e440f1797ad44d7fa49dc28e049.jpg

То есть не надо менять и компилировать тексты чтобы поменять логику поведения. Собственно говоря, это не что иное как подключение плагинов!

Магазин расширеней Chrome. Нам не нужно менять исходники браузера чтобы добавить или поменять функциональность.Магазин расширеней Chrome. Нам не нужно менять исходники браузера чтобы добавить или поменять функциональность.

Версионирование

В мире разработки ПО мы всё время работаем с разными версиями программ, библиотек, API и так далее. В мире права тоже всё время идёт работа с версиями. Только там всё очень продвинуто — всегда используются самые последние версии законов, постановлений, регламентов и прочего! Никакого legacy. Релизим новую версию, и всё, она сразу везде применяется!

Есть аналогия. К примеру, в Android SDK есть класс Context, у которого есть метод:

public abstract int checkSelfPermission (String permission)

Однако, в документации отмечено, что он добавлен в версии SDK 23. Это значит, что если приложение работает на устройстве с версией Android < 23 (Android 6.0), то мы его использовать не можем.

А теперь давайте взглянем на этот документ:

см. https://habr.com/ru/post/480510/ - Хроника противостояния Рамблера и Nginxсм. https://habr.com/ru/post/480510/ — Хроника противостояния Рамблера и Nginx

Да, это постановление о производстве обыска по делу Rambler & nginx. В тексте мы читаем:

В соответствии со ст. 1295 ГК РФ, программа для ЭВМ «энджиникс» является служебным произведением, и исключительное право на неё, а именно в соответствии со ст. 1229 ГК РФ право использовать распоряжаться ей, принадлежит ООО «Рамблер Интернет Холдинг».

Однако, постановление описыват событие, имевшее место в 2004 году, когда ст. 1295 и 1229 ещё не существовало! NoSuchMethodError!

Diff

А что, если нам нужно старый закон заменить новым? Но не целиком, а внести небольшие правки? В данном случае всё просто:

git checkout -b new_law
git commit -m "new speed limit"
git push origin new_law

Да, с правками в текст законов работают также как и с правками в исходные коды. Их можно сравнивать:

А сам диф (в данном случае диф называется Федеральный закон от 24.07.2007 N 210-ФЗ (ред. от 31.12.2014) «О внесении изменений в Кодекс Российской Федерации об административных правонарушениях») при этом выглядит примерно так:

в статье 12.9:
а) утратил силу с 1 сентября 2013 года. — Федеральный закон от 23.07.2013 N 196-ФЗ;
б) в части 2: в абзаце первом слова «от 20 до 40» заменить словами «более 20, но не более 40»;

А какие аналогии подмечали вы?

© Habrahabr.ru