Патч "справедливости"
Представим ситуацию. Контора берёт разработчика. Не в штат, а по договору ГПХ. Удобно. Ни отпускных, ни больничных, ни обязательств. Схема обычная, никто нынче уже не удивляется.
Работа идёт. Месяц, два, три. Потом начинается какая-то муть с деньгами. Сначала задержка на неделю. Потом на две. Потом "потерпи, всё будет". Разработчик понимает: пора уходить. Не потому что принципиальный. Просто кушать хочется.
Но перед уходом он делает одну вещь. Типовую для своей профессии. Ничего особенного - просто обновляет версию библиотеки в репозитории. Классический jQuery, или любую другую - это вообще тут не важно. Меняет номер версии, кладёт новый файл. Всё как обычно. Только библиотека пропатчена. Внутри - маленькое дополнение. В самой библиотеке.
Мысль простая. Ревью кода делается часто. Ревью типовой библиотеки - не делается. Никто не открывает jQuery и не проверяет, что там внутри. Все смотрят на свой код. А эта зависимость - не свой код, а часть инфраструктуры, которой пользуемся. Она приходит снаружи. Ей доверяют.
Разработчик увольняется. Деньги ему не отдают. Ни через месяц, ни через два. Просто тишина. Он не пишет заявлений, не судится, не скандалит. Просто уходит.
Проходит N месяцев.
И тут - в один день... На всех страницах системы у клиентов. Во всех полях ввода, кроме формы авторизации. Появляется фраза. Короткая. К примеру: "Я тут был. Вася".
Механика - простая. Патч ищет на странице определённые буквы по массиву asc-кодов. Когда находит все - заменяет значения заполненных полей на фразу. Потому что не заполнено - значит не надо. Туда не лезем.
Клиенты видят. Звонят в поддержку. Поддержка ищет в коде. Не находит. Потому что в коде фразы нет. Она в библиотеке. А библиотеку никто не проверяет. Она же типовая, да и в репозитории уж сколько месяцев не тронутая лежит.
Начинают искать причину. Уходит день, два, неделя. Кто-то догадывается посмотреть через консоль. Доходит до jQuery. Внутри - патч. И тогда приходит понимание. Это не баг. Это след.
Теперь вопрос. Прав ли программист.
Юрилически - он нарушил. Вмешался в работу системы. Изменил поведение продукта. Нанес репутационный ущерб. Возможно, финансовый. Тут можно спорить о суммах, но факт остаётся фактом. Да и сам Вася если что присесть мог бы, не будь он вымышленным.
Не формально - он не тронул данные. Не удалил заказы. Не сломал бизнес-логику. Он всего лишь поменял текст в полях ввода. Система работала. Просто в полях теперь было написано "Я тут был. Вася".
Что это? Месть? Самоутверждение? Акт искусства? Или детская выходка? Зависит от рамки: от того, кем был Вася и сколько ему не заплатили.
Он ничего не выиграл. Деньги не вернул. Справедливости не добился. Он просто оставил след. Как надпись на стене. "Здесь был Вася". Не "вы мне должны". Не "я вас накажу". А "я существовал". Несмотря на то, что вы меня вычеркнули.
Контора работает. Взяла новых. Старые в пролёте. Никто не понёс ответственности за невыплаты. Никто не узнал, кроме тех, кто открыл jQuery... и всех клиентов той гипотетической конторы.
И да, я знаю, как действия этого вымышленного разработчика будут интерпретированы по УК РФ. Dura lex sed lex.
Но вот по человечески (или клише "по понятиям") - прав ли он - открытый вопрос.
Интересно, кто бы поступил также, как этот вымышленный программист, а кто не стал бы?
Жаль, в Сетке голосование нельзя устраивать - очень любопытно было бы взглянуть на соотношение "рискованных" и "законопослушных".
ВНИМАНИЕ!
Приведенный выше простенький вариант патча крайне не рекомендую использовать, потому как и правда - УК РФ весьма и весьма критично настроен к таким "милым шалостям". :)
· 16.09
Добрый вечер, Александр 👋🏻 Я на самом деле в растерянности. Я был свидетелем разных ситуаций со схожей исходной проблемой, но такое мне довольно сложно представить 🤔 Я некоторое время пытался емко сформулировать противоречие и остановился на этом: в вашей истории не очень правдоподобно соотношение сложности поступка и примитивности его цели. Объясню на более простом примере. Пусть наш Вася работает охранником парковки. Пусть ему не заплатили за какой-то период работы. Дальше варианты зависят от параметров самого сотрудничества, но свести можно примерно к таким (если "хозяева" парковки в полном отказе): 1. Есть договор + сумма достаточная для волокиты - можно заходить в legal. 2. Есть договор + сумма маленькая - терпим, как говорил Борис Николаевич, "в какой стране живешь". 3. Нет договора: 3.1. Полное состояние аффекта - условно Вася сжигает парковку со со всем, что там есть. С известными последствиями. 3.2. Желание получить какие-то деньги - создание "проблемы" как повода для торга (осуждаю) или совсем уже "чернуха" (угон машин и тому подобное - осуждаю в квадрате).
А исходя из действий Васи в вашем примере относительно истории с парковкой это похоже на то, как если бы он пробрался туда и написал на лобовом стекле каждой машины "Здесь был Вася". Логика примерно 4д, коррекционного класса, уж простите (мое мнение). Повторюсь, я был свидетелем нескольких ситуаций с примерно такими же вводными. И там никто так не изощрялся. Либо создавали "повод для торга" (что нелегально в любой юрисдикции), либо "выжженная земля" (что тоже нелегально). Это возвращаясь к соотношению сложности поступка и примитивности его цели.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 17.09
Доброе утро, Иван!
Вы безусловно правы относительно более приземленного примера. То, что делает охранник - хулиганка чистой воды, причем абсурд поступка охранника очевиден. Хотя... "уникомов" хватает, особенно если беленькой принял на грудь для храбрости.
Но я не согласен с Вами относительно сложности поступка. Поясню немного "кухню" разработки изнутри. Создать "бэкдор" - не такая уж редкость. Вот пример: когда нужно реализовать авторизацию через SMS, но пока реального сервиса нет, используем заглушку - СМС всегда (к примеру) 1111. Тривиальная ситуация. Или более сложно - оставить возможность авторизации по уникальному параметру, который можно передать исключительно прописав его руками. Что произойдет, если данный код останется в продакшене? Верно - мы будем знать как попасть в чужую систему. Конечно, отчасти Вы все ж были правы. Но лишь отчасти - технически вымышленная ситуация допускала у разработчика Васи способности к стратегическому планированию уровня "что будет после моей смерти". То есть технически описанный алгоритм может реализовать без ИИ любой мидл-разработчик. В плане планирования - не любой сеньор.
Но все же. Тут все более неоднозначно, нежели Вы продемонстрировали в комментарии. Да, рассматривая полюса 1, 2 (правовое поле), и 3 (силовой метод), мы сводим условного Васю к рациональной модели.
Речь в посте же шла о диллеме выбора - оставаться в правовых рамках, либо использовать способности для иррационального. Не требовать, не судиться, не терпеть. Только засвидетельствовать своё присутствие.
На счет экзестенциального в Вашем ответе - "цель ничтожна". Верно, она ничтожна даже по сравнению с испорченными машинами на стоянке. "Лечится" такой вот "патч" быстро - найти только нужно. Но вопрос у Васи и не стоит в формате выбить деньги/восстановиться на работе/получить какой-то профит. Цель - показать, что система уязвима не меньше, чем сотрудник, которого кинули на деньги и забыли о нем. Минимальное техническое решение при понимании как работает система ревью кода дает возможность организовать подобный "подарок" за крайне не продолжительное время. А если потраченное время ничтожно, то и эффект не обязан быть вселенского масштаба.
Знаете, выбирая цитату для действий Васи, я выбрал бы фильм "В осаде-2" с Сигалом. Там главный злодей говорит такие слова: "Я был умней вас до того, как работал на вас, я был умней вас когда работал на вас, и я до сих пор умней вас". Но не в плане "я умней вас", а в плане "я знаю как работает система".
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 17.09
Доброе утро, Александр 👋🏻 Мне правда интересно рассуждать над вашими некоторыми постами, поэтому все нижеизложенное не является попыткой "загнать вас в угол" и "подоминировать", а является своеобразной "разминкой для мышления". Проговариваю это еще раз скорее не для вас, а для потенциальных читателей, у которых может сложиться такое впечатление. Теперь к сути. Мне кажется, что мы немного разошлись в понимании слова "сложность". Я вообще не имел в виду техническую сложность реализации такого патча. С тем, что подобное технически вполне доступно обычному разработчику, я и не спорю 😌 Под сложностью я имел в виду всю конструкцию поведения Васи: заранее предусмотреть возможный конфликт, спрятать изменение там, где его с меньшей вероятностью заметят при ревью, заложить отложенное срабатывание через Х месяцев и при этом выбрать результат, который не дает ему практически ничего. Более того, ваше уточнение про "стратегическое планирование уровня “что будет после моей смерти”" скорее даже усиливает мое первоначальное недоумение. Чем более предусмотрительным и рациональным мы делаем Васю на этапе подготовки, тем сильнее контраст с его конечным действием 🤔 Но в вашем ответе, как мне думается, произошло еще одно интересное изменение. В вашем оригинальном посте мотив был сформулирован (поправьте меня, если я снова не так понял) как "я существовал", "я оставил след", буквально как надпись на стене. Теперь после вашего комментария появляется другая цель: "показать, что система уязвима не меньше, чем сотрудник" и "я знаю, как работает эта система". Это уже вполне осмысленное сообщение. Только тогда резонно возникает следующий вопрос: кому именно Вася его адресует? Давайте вернемся к моей аналогии с парковкой. Допустим, Вася не просто написал на машинах клиентов "Здесь был Вася", а таким образом хотел сообщить владельцу парковки: "Смотри, твоя система безопасности уязвима, я до сих пор могу сюда попасть". Хорошо. Но почему тогда носителем этого сообщения становятся машины людей, которые Васе ничего не должны и вообще не являются участниками конфликта? Понимание мотива определенно появилось, а странность выбранного объекта воздействия никуда не исчезла. И здесь, по-моему, находится основное противоречие. Если Вася хочет денег, существуют инструментальные действия. Если хочет продемонстрировать уязвимость системы, существуют адресные (именно адресные) способы это сделать. Если Вася находится в состоянии "сгорел сарай - гори и хата", тогда психологически понятна "выжженная земля" (условно, снес весь сервис целиком), хотя юридическую и моральную сторону оставим за кулисами нашей сцены. А если действие принципиально иррационально, как вы теперь уточняете, то, смею предположить, что мой исходный тезис фактически остается в силе: несоответствие продуманности поведения выбранной цели не требует дополнительного объяснения именно потому, что само действие мы заранее определили как иррациональное. Но тогда я уже не очень понимаю, в чем заключается заявленная дилемма 😌 Поэтому я бы даже поправил свою первоначальную формулировку. Мне кажется неправдоподобным не соотношение технической сложности поступка и примитивности цели, а соотношение продуманности поведения, заявленной мотивации и выбранного объекта воздействия. И время реализации здесь, на мой взгляд, ничего не меняет. Вопрос не в том, должен ли эффект пяти минут работы быть "вселенского масштаба". Он может быть совершенно ничтожным. Вопрос в другом: почему при конфликте Васи с компанией объектом воздействия внезапно напрямую становятся ее клиенты? Поэтому ваша цитата из "В осаде 2" мне даже нравится 👍🏻 Она делает мотивацию Васи гораздо понятнее: "я знаю вашу систему лучше вас". Но тогда по аналогии "мой" Вася с парковки теперь говорит примерно следующее: "Я написал на стеклах машин ваших клиентов, чтобы показать вам, что все еще могу проникнуть на парковку". Что именно он хотел продемонстрировать, теперь понятно. Почему для демонстрации он выбрал именно это - для меня все еще нет 🤔
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 17.09
Благодарю! Вы не пытаетесь зажать в угол, и это видно. Уточняете, а не ловите на слове, что уже само по себе крайне ценно. Потому и мне интересно отвечать не защитой, а продолжением мысли.
Теперь по сути. Мне кажется, мы действительно разошлись. Но не в мотивации Васи, а в точке зрения на одно и то же действие. Позвольте объяснить, что я имею в виду.
Это не две мотивации. Это одна, увиденная с двух сторон. Когда я писал пост, то смотрел на результат. Что остаётся после Васи? След. Надпись. Факт: "Я тут был". Это экзистенциальный слой. Вася не требует, не мстит, не торгуется. Он просто фиксирует, что существовал.
Когда я отвечал Вам, смотрел на условие. Почему он может это сделать? Потому что знает систему. Он знает, где ревью не делают. Он знает, что условный jQuery никто не откроет. Он знает, что след доживёт до срабатывания.
Это не две цели. Это причина и следствие. Он знает систему = поэтому может оставить след. Он оставляет след = потому что хочет зафиксировать, что был.
Вы прочитали мой ответ как "Вася хотел показать компании, что система уязвима". Но я имел в виду другое: "Вася знал, что система уязвима, и это дало ему возможность оставить след". Знание - не цель. Знание - инструмент. Но Вы правы: я сейчас перечитал собственный ответ и действительно, фраза построена не однозначна. Mia culpa.
Так почему клиенты? Если бы Вася хотел сообщить компании что-то, он бы выбрал адресный способ. Написал бы владельцу "парковки". Оставил бы записку в офисе. Сделал бы так, чтобы сообщение дошло до адресата.
Но он не хочет сообщать. Он хочет оставить след. А след — это не диалог. Это факт.
Стена, на которой написано "Здесь был Вася", не получает сообщение. Стена - поверхность, а не адресат. Она - только носитель.
Клиенты - это та же стена. Он не выбирал их. Он не думал о них. Он выбрал место, где след живёт дольше всего. Где его увидят и где его не сотрут сразу. Где он будет у всех на виду.
Он не бьёт по клиентам (просто не думает о них: они для него абстракт, а не персонифицированные субъекты). И он использует их как поверхность. Не потому что они виноваты, а потому, что они слепая зона. Их поля видны всем, но их код никто не проверяет.
Почему не адресно? Потому что адресное сообщение - это диалог. А Вася уже ушёл и не ждёт ответа. Он не ждёт, что компания поймёт. Он не ждёт, что его позовут обратно.
Адресное сообщение предполагает, что он всё ещё внутри отношений. Что он всё ещё ждёт. Что он всё ещё надеется. А он не надеется: он завершил. И след - это не начало разговора. Это точка.
Теперь к дилемме. Вы говорите, что если действие иррационально, то несоответствие продуманности и цели не требует объяснения. И дилемма исчезает. Но дилемма не в том, рационален Вася или нет. Дилемма в том, что делать, когда правовые и силовые инструменты не используются (по любым причинам).
Вася не выбирает между "судиться" и "сжечь". Он выбирает между "исчезнуть" и "оставить след". И выбирает второе. Не потому что это эффективно. А потому что это единственное, что осталось.
Это скорей не иррационально - это за пределами рационального. Это не "я добьюсь своего", а "я не исчез".
И это не превосходство. Это - знание слепой зоны, которая используется не для того, чтобы что-то доказать, а для того, чтобы оставить след в этой слепой зоне.
Повторюсь. Вы правы: в посте и в ответе акценты разные. Но это не смена мотивации, а две точки зрения на одно действие. В посте: что остаётся. След. В ответе: почему это возможно. Знание системы.
Поэтому вопрос "почему клиенты?" имеет ответ: потому что там след живёт дольше. Не потому что он хотел им что-то сказать. А потому что там его не сотрут сразу.
А дилемма остаётся. Просто она не про эффективность. Она про право на след.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 17.09
Александр, благодарю за развернутое пояснение 😌 Кажется, теперь я достаточно хорошо понял, какую именно конструкцию вы закладывали в эту историю. У меня она по-прежнему не складывается именно на уровне мотивации и поведения Васи, но, я думаю, дальше мы уже просто начнем ходить кругами вокруг разного восприятия одной и той же ситуации. В любом случае это была интересная беседа и возможность немного размять мышление 👍🏻
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён