[О блоге] [наверх] [пред] [2023-03-06 13:42:43+03:00] [378e52ad7ab048f779f1090b11df5879521256d8]

Всё есть файл в Plan9

http://fqa.9front.org/fqa0.html
Когда люди как мантру повторяют что Unix упорно следует идее "всё есть
-- файл", то я не понимаю как они при этом умудряются закрывать глаза на
то, что всё что касается сети в нём никак не представлено в виде файлов.
За некоторым исключением конечно же. Файлы блочных устройств, символьных
-- действительно файлы, с которыми, правда, всё равно fcntl вызовы делают.
Но сеть то рулится просто вызовами не связанными с файловыми устройствами.

Unix никогда не создавался как нечто "with networking in mind". TCP/IP в
нём появился более чем через дюжину лет с момента появления. А прежде
всё "сетевое" взаимодействие было в виде UUCP.

А вот в Plan9 реально всё сделано в виде файлов, как упоминает Russ Cox:

* рисование графики: просто отправка текстовых строчек с командами в
  локальный для процесса device file
* в Unix-ах появился per-process /dev/tty, но в Plan9 и множество других
  устройств per-process (/dev/cons, /dev/mouse, /dev/text (содержимое
  текущего окна, и т.д.)
* работа с FTP, через /n/ftp ftpfs (хотя это через FUSE реализации тоже
  многие делают)
* /mail/fs/mbox через upas/fs представляет почтовые ящики в виде
  иерархии на ФС, в том числе позволяя "ходить" и по MIME таким же образом
* cdfs позволяет слушать аудио CD через файлы в /mnt/cd. Записывать
  аудио или данные можно просто скидывая файлы в /mnt/cd/wa или /mnt/cd/wd.
  Хотим зафиксировать CD? Просто удаляем эти директории. По моему очень
  красиво

Так как вся работа с файлами идёт поверх 9P протокола, который без
проблем ложится на сетевые протоколы, то что мешает импортировать
файловые системы на удалённых машинах? Хотим использовать звуковую карту
сторонней машины? Импортируем (гоняем 9P не по localhost, а через сеть)
её /dev/audio. Отладить процесс другой машины? Импортируем /proc.
Использовать сетевой интерфейс удалённой машины? Импортируем /net.

    [оставить комментарий]