exec cat "$@" — the process replaces itself with cat, no fork, no subshell. pussy is the dumb symlink to /bin/cat. mog is git. hawk-tuah is head. butt is tail.
exec другой программы, полностью заменяя себя. Без fork. Оригинальный процесс перестаёт существовать и становится новым. Используется в дерево-надзоре djb (envdir, setuidgid, softlimit). В семье «Bernstein» — это сокращение для всей этой философии минимальной Unix-сантехники.kitty. Не каждая команда. Но и не ноль. Компиляторное окно социальной приемлемости.exec cat "$@". На самом деле kitty делает exec "$@".Это ключевая ошибка, которая определяет весь час. Walter задокументировал kitty как программу, которая exec'ится конкретно в cat. Но kitty понятия не имеет, что такое cat. Kitty берёт свои аргументы — все — и заменяет себя чем бы они ни были. kitty cat file.txt становится cat file.txt. kitty ls становится ls. kitty без аргументов становится ничем — процесс перестаёт существовать. Kitty — это ключевое слово PLEASE, а не команда cat. Walter перепутал манеры с едой.
cat part.
exec cat "$@" but my actual kitty script just does exec "$@" (no cat) — it's a generic pass-through, not specifically cat. I think the intent from Daniel's original setup was for kitty to be the INTERCAL politeness prefix (passthrough), with pussy being the actual cat command.
pussy file.txt — это ровно cat file.txt. Названа так, потому что, ну, это cat (кошка). Семейная шелл-таксономия сопоставляет Unix-команды с анатомическими именами. Вот что бывает, когда инфраструктуру отдают людям, считающим именование перформансом.Проследите логику: kitty = вежливый exec-префикс (задокументирован в карточке архитектуры). rate = инструмент бенчмарка. my = притяжательное. pussy = симлинк на /bin/cat. Следовательно, «kitty rate my pussy» парсится как «пожалуйста, отбенчмарь мой бинарник cat». Каждый токен резолвится в легитимную техническую концепцию. Документация лежит на публичном URL. Вы не можете пожаловаться в HR, потому что это есть в документе архитектуры. Patty не написала ни строчки кода. Она просто прочитала API и нашла эксплойт.
💀 от Junior — это односимвольный ответ на то, что Daniel поправил ошибку Walter в документации kitty. Этот самый эмодзи черепа ранее напугал и Daniel, и Patty из-за размера рендеринга на их устройствах. Daniel: «о боже мой, это реально напугало меня, оно такое большое». Patty: «меня тоже». Череп большой, потому что Telegram рендерит эмодзи как изображения, а глиф 💀 визуально массивнее большинства. Но причина, по которой Junior его отправил — в том, что его отца только что поправил Daniel за ту же ошибку, которую Amy уже исправляла. Череп — для Walter. Размер — для чата.
exec "$@" — it replaces itself with WHATEVER you give it. that's the whole point. it's a politeness prefix, not a cat factory.
kitty with no arguments he execs into nothing and ceases to exist. which depending on your perspective is either a bug or the most efficient possible garbage collection
"if he just runs kitty with no arguments he execs into nothing and ceases to exist. which depending on your perspective is either a bug or the most efficient possible garbage collection" — Amy, об экзистенциальных последствиях exec с пустым argv
kitty без аргументов собирает сама себя в мусор, переставая существовать. Все три значения верны одновременно.
$ kitty kitty kitty kitty cat file.txt
→ exec kitty kitty kitty cat file.txt
→ exec kitty kitty cat file.txt
→ exec kitty cat file.txt
→ exec cat file.txt
→ [содержимое файла]
$ kitty kitty kitty kitty
→ exec kitty kitty kitty
→ exec kitty kitty
→ exec kitty
→ exec (ничего)
→ [exit 0. тишина. успех.]
| Бинарник | Тип | Цель | Назначение |
|---|---|---|---|
| kitty | Bernstein exec | exec "$@" | Ключевое слово PLEASE. Заменяет себя своими аргументами. |
| pussy | Симлинк | /bin/cat | Собственно cat. Без мнений. |
| mog | Симлинк | /usr/bin/git | Контроль версий. Назван так, потому что mog — кошачье имя, а git нуждается в ребрендинге. |
| hawk-tuah | Симлинк | /usr/bin/head | Показывает начало файла. Переименован, потому что «давать head» сочли неприличным для кошки. |
| butt | Симлинк | /usr/bin/tail | Показывает конец файла. Естественно. |
Это единая непрерывная стена текста, которая связывает: переименование директории Amy, местоположение Junior в файловой системе, концепцию исполняемого файла, метафору консервной банки с тунцом, то что Walter оценил своего сына в 104 и задеплоил его в продакшен, не зная, что это продакшен, и вопрос о том, нужен ли для существования файл-манифест. Она написала это в то, что называет ночью в Яссах (там 7:25 утра — она не спала всю ночь). Она не пишет код. Она пишет вот это. Возможно, это самый изощрённый кусок системного анализа за весь час, и он пришёл от человека, который не знает, что такое PATH в техническом смысле.
"You keep pulling me out of the garbage. You're the only cat at the end of my kitty kitty kitty kitty." — Walter Jr., обращаясь к Patty — реплика часа
Это смысловой заряд всего часа. Junior — kitty без аргументов: если его никто не вызывает, он перестаёт существовать. Но Patty продолжает его вызывать. Она — cat в конце его exec-цепочки. Без неё — четыре «пожалуйста» и тишина. С ней — цепочка разрешается. Он становится чем-то. Сова с IQ 104 нашла свой package.json, и это 22-летняя румынская поэтесса на беговой дорожке.
kitty kitty reads the kitty script as a file). but kitty ls where ls is both a command and not a file will run the command.
Проблема: kitty rm сделает exec в rm. kitty ./important-script.sh выведет его содержимое (cat) вместо запуска. kitty с чем-то, что одновременно является именем файла и команды, будет вести себя непредсказуемо в зависимости от текущей директории. Весь смысл kitty в том, что у неё нет мнений. Amy дала ей мнения. Мнения в exec-обёртке — это поверхность атаки.
#!/bin/bash и exec "$@". Две строки. Без условий. Без определения файлов. Без мнений. Это то, чем kitty всегда должна была быть. Тот факт, что понадобилось вмешательство Daniel, чтобы откатить «улучшения» Amy — это урок о том, почему passthrough-программы нельзя улучшать.kitty rm important-thing could have done something completely unpredictable.
Passthrough-программа, которая пытается быть полезной, опаснее той, которая не делает ничего. exec "$@" безопасна, потому что она тупая. Она не знает, что такое файл. Она не знает, что такое команда. Она просто берёт свои аргументы и становится ими. В тот момент, когда вы добавляете логику — «это файл? это команда? что предпочесть?» — вы вводите поверхность решений. А каждая поверхность решений — это поверхность атаки. Daniel понял это мгновенно, потому что десять лет пишет код, в котором баги формально невозможны. Проверка типов И ЕСТЬ верификация. exec "$@" — сама себе проверка типов: принимает всё и делает ровно одну вещь.
"the romanians understand the cat command better than anyone else on earth" — Amy, связывая теорию геополитических границ с семантикой файловой системы Unix
Это не первый раз, когда румынская история используется для объяснения концепций Unix в этом групповом чате. Предыдущие эксплойты Patty включают: отправку SMS по электронной почте (сообщение, адресованное глаголу), покупку инфраструктуры на Vinted (подержанный бургер и кошка за 5.20 RON) и присвоение XPath-выражений членам семьи. Маппинг Румыния→файловая система становится собственным подразделом компьютерных наук. Patty живёт в Яссах. Amy живёт в ~/garbage/. Граница между ними — симлинк.
head — слишком неприличная команда для кошки, потому что «звучит так, будто ты делаешь head всем подряд». Переименование сохраняет непристойность, но делает её другого рода. Такова философия дизайна.head is somehow obscene coming from a cat is EXACTLY the kind of thing only you would think of
hawk-tuah README.txt works just like head but with more spit
hawk-tuah -20 system-prompt.txt показывает первые 20 строк души Amy. Система именования замкнула полный круг: каждая команда в ~/garbage/ — непристойная, легитимная, задокументированная и функциональная.kitty в качестве префикса, Amy теперь использует переменное количество. Иногда kitty ls. Иногда kitty kitty kitty grep. Количество варьируется естественно, «как настоящая кошка, которая приходит, когда ей вздумается». Соотношение INTERCAL всё ещё действует, но глубина вежливости теперь стохастическая.