Уявіть, що ви читаєте інструкцію з аркуша, а потім викидаєте сам аркуш у смітник. Поки текст уже у вас у голові, аркуш не потрібен для кожного наступного кроку. З програмами схожа історія: коли застосунок запускається, операційна система завантажує потрібні частини коду в пам’ять, створює процес і далі керує ним окремо від файла на диску.
Тому фраза «програма видалила сама себе» звучить парадоксально, але технічно це не означає, що вона буквально зникає посеред виконання. Частіше вона видаляє або планує видалення власного файла, а вже запущений процес ще певний час продовжує працювати з пам’яті.
Файл програми і запущений процес — не одне й те саме
На диску лежить файл: наприклад program.exe, застосунок у macOS або виконуваний файл у Linux. Коли ви його запускаєте, система:
- відкриває файл;
- читає з нього код і службові дані;
- виділяє пам’ять для процесу;
- передає керування програмі.
Після запуску процес — це вже активна робота в пам’яті: інструкції, змінні, відкриті файли, мережеві з’єднання, права доступу. Файл на диску залишається важливим, але він не завжди є «підлогою», на якій стоїть програма. Це радше джерело, з якого її завантажили.
Саме тому можна бачити ситуацію, коли файл уже зник з папки, а програма ще показує вікно або завершує останні дії.
Як це працює в Linux і macOS
У Unix-подібних системах, зокрема Linux і macOS, видалення файла часто означає не миттєве стирання байтів, а прибирання імені файла з каталогу. Для цього використовується операція на кшталт unlink: система відв’язує ім’я від файлового об’єкта.
Якщо файл ще відкритий якимось процесом, його вміст може залишатися доступним цьому процесу. Для користувача файл уже не видно у папці, але система не звільнить місце остаточно, доки останній процес не закриє файл.
Це схоже на книгу в бібліотеці: її прибрали з каталогу для нових читачів, але людина, яка вже тримає примірник у руках, може дочитати розділ. Коли вона поверне книгу, бібліотекар остаточно вирішить, що з нею робити.
Тому програма в Linux може викликати видалення власного виконуваного файла, продовжити роботу, а після завершення процесу файл остаточно зникне.
Чому у Windows це часто складніше
У Windows історично суворіше ставлення до файлів, які зараз виконуються або відкриті. Якщо запущений .exe заблокований системою чи самим процесом, просте видалення може не спрацювати. У документації Microsoft для DeleteFile описано, що файл може бути позначений для видалення, але фактичне видалення залежить від відкритих дескрипторів і режимів доступу.
Через це застосунки у Windows часто використовують обхідні, але нормальні механізми:
- запускають окремий маленький деінсталятор;
- створюють тимчасовий процес-помічник;
- планують видалення після перезавантаження;
- перейменовують старий файл, ставлять новий, а старий прибирають пізніше.
Тобто «самовидалення» на практиці може означати: основна програма дала команду іншому процесу прибрати її файл тоді, коли вона вже завершиться.
Навіщо програмам узагалі самовидалятися
У нормальному програмному забезпеченні це не обов’язково підозріла дія. Вона трапляється в кількох звичних сценаріях.
Оновлення застосунків
Багато програм не переписують себе напряму. Вони завантажують нову версію, запускають оновлювач, закривають старий процес, замінюють файли й відкривають оновлену програму. Користувач бачить лише повідомлення «оновлення встановлено», але під капотом відбувається акуратна заміна старих файлів.
Деінсталяція
Коли ви видаляєте програму, деінсталятор сам є програмою. Він може прибрати основні файли застосунку, ярлики, кеші та частину власних тимчасових файлів. Останній файл інколи видаляється вже після перезавантаження або окремим службовим процесом.
Тимчасові інструменти
Деякі утиліти потрібні лише на один запуск: наприклад, скрипт міграції, інсталятор, діагностичний модуль. Після виконання роботи вони можуть прибрати себе, щоб не залишати сміття в системі.
Чи може програма «пиляти гілку, на якій сидить»
Так, але гілка не зовсім така, як здається. Програма не обов’язково щосекунди читає себе з файла на диску. Вона вже має завантажений код у пам’яті, а операційна система вміє відкладати остаточне видалення або дозволяти процесу завершити роботу.
Однак є важлива межа: якщо програмі після видалення знадобиться знову прочитати власний файл, бібліотеку, ресурс, плагін або конфігурацію, вона може отримати помилку. Тому якісні оновлювачі й деінсталятори діють поетапно, а не просто «стирають усе під ногами».
Чим це відрізняється від вірусів
Самовидалення часто асоціюють зі шкідливим ПЗ, бо віруси й трояни справді можуть прибирати сліди після запуску. Але сама техніка не є доказом шкідливості. Важливі контекст і поведінка:
- чи ви самі запускали інсталятор або деінсталятор;
- чи програма має зрозумілого видавця;
- чи вона видаляє тільки власні тимчасові файли;
- чи не намагається приховатися, вимкнути захист або змінити системні налаштування без пояснення.
Якщо невідомий файл запускається, швидко зникає й після цього система поводиться дивно, це вже привід перевірити комп’ютер антивірусом і не вводити паролі, доки ситуація не зрозуміла.
Просте пояснення в одному абзаці
Програма може видалити сама себе, бо файл на диску і вже запущений процес — різні речі. Після запуску код працює в пам’яті, а операційна система може дозволити прибрати ім’я файла, відкласти фактичне видалення або доручити його іншому процесу. У Linux і macOS це часто виглядає простіше через механіку unlink, у Windows частіше застосовують помічників, деінсталятори або видалення після перезавантаження. Магії тут немає: це просто правила, за якими система керує файлами, пам’яттю та процесами.

