Почему в Linux приложение может удалить само себя, а в Windows нет?
=====================================================================

 В Windows, при попытке приложения удалить свой исполняемый файл, мы получим ошибку "файл занят процессом", а в Linux нет (по крайней мере консольная утилита, написанная на основе .NET Core, смогла снести все свои файлы не вызвав исключения).  

  

Хотелось бы понять разность подходов. 

 Когда процесс открывает файл, он открывает дескриптор на определенную структуру данных. Эта структура содержит аттрибуты файла, права доступа, информацию о том, где хранятся данные файла и так далее.  

  

В Win и *nix эта информация хранится в разных местах, и соответственно лок происходит по-разному.  

  

В POSIX системах (unix, linux, etc.) информация о файле хранится iNode, а имя файла уже ссылается на iNode.  

  

В Windows и DOS изначально информация о файле хранилась в структуре которая называется Directory Entry. В NTFS это немного изменилось, но подход они не меняли либо для обратной совместимости, либо не видели в этом нужды.  

  

Собственно отсюда исторически и выросло, что в *nix при открытии файла дескриптор указывает на iNode, а само имя файла можно при этом свободно удалять, или делать несколько имен ссылающихся на одну iNode (hard link), которые можно произвольно менять, пока "файл открыт".  

  

В Windows лочится непосредственно Directory Entry (или ее аналог в NTFS), следовательно его модифицировать в этот момент нельзя.  

  

У обоих подходов есть свои плюсы и минусы и история. Пока нет предпосылок к тому, что на Windows захотят изменить подход. 

 Потому что в Windows имя файла гвоздями прибито к самому файлу, а в Linux имя - просто запись в файле директории. На хабре много лет назад была прекрасная статья про это, но я теперь не в состоянии ее найти. 

 в Linux при удалении приложение(файл) остаётся в ОЗУ до перезагрузки или остановке процесса. Windows же закрывает все связанные процессы(или пытается) и удаляет файл, более не исполняемый.  

Так можно удалить все корневые директории в Линукс и система будет работать, но при перезагрузке она не запустится.