Концепции и размышления о новой современной операционной системе

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Задумывались ли вы о том, насколько архаичен дизайн операционных систем, которыми мы пользуемся в настоящее время?

Например, почему в Windows (включая 11-тую версию) основной диск с операционной системой называется C?

Или почему Microsoft открыто не публикует исчерпывающий список отличий в ядре Windows от версии к версии с точки зрения разработки приложений, т.е. различий в WinAPI. Может быть потому, что тогда все увидят, что начиная с Windows XP вообще ничего значимого в WinAPI не появилось? Навскидку, более 99% используемых в приложениях системных вызовов, вроде CreateFile имеют приписочку ‘Minimum supported Windows XP’ или ‘Minimum supported Windows 2000’, а в оставшемся <1% указано ‘Minimum supported Windows Vista’. Попробуйте найти хотя бы штук 5 новых полезных возможностей ядра Windows 11 относительно Windows 7, например. Речь не про новый отвратительный (по сравнению с Windows 7/8) калькулятор и не про обновлённый Блокнот или MS Paint, а об изменениях, которые видны программисту, пишущему полноценные (т.е. Desktop) приложения, т.е. изменений в WinAPI, ну или хотя бы о тех, которые не затрагивают WinAPI, но относятся именно к ядру ОС. Все те новшества, о которых Microsoft говорит на презентациях, легко реализуются на пользовательском уровне, либо в драйверах, вообще никак не требуя доработок ядра ОС. Если бы такой список изменений ядра ОС Windows был опубликован, то я уверен, что многих бы поразило, насколько незначительно ядро Windows 11 отличается от Windows 7 или даже Windows XP, которая вышла 23 года назад.

С другой стороны, у нас есть Unix, которая вообще разрабатывалась для мейнфреймов и "мини-компьютеров" размером с современный серверный шкаф для ЦОД, к которым подключалось множество терминалов и которые обслуживали большое количество инженеров.
О тех временах красноречиво говорит такое высказывание, приписываемое министру радиопромышленности СССР Николаю Горшкову:
Персонального компьютера не может быть. Могут быть персональный автомобиль, персональная пенсия, персональная дача. Вы вообще знаете, что такое ЭВМ? ЭВМ — это 100 квадратных метров площади, 25 человек обслуживающего персонала и 30 литров спирта ежемесячно!

Но времена поменялись. И теперь уже не один компьютер на 10-100 человек обслуживающего персонала, а один человек может обслуживать 10-100 компьютеров. А вот принципиальный дизайн ОС семейства Unix остался по сути прежним. Вот только современные дистрибутивы Unix/Linux всеми силами пытаются его скрыть от пользователя под красивыми обёртками (включая новые более удобные версии утилит командной строки и графический интерфейс, если говорить про desktop). Но что скрывается под этими обёртками?

Попробуйте выполнить такую простую задачу, как узнать количество свободного места на диске вашего компьютера используя командную строку. Речь про Linux. (В Windows это сделать на удивление просто командой dir без параметров [смущает только вывод числа в байтах, из-за чего получается огромное количество цифр, особенно если свободное место измеряется в терабайтах].)

Я вот честно не помню даже такую простую команду, т.к. взаимодействую с Linux крайне редко. Но что нам выдаёт Google? Первый результат поиска по строке ‘linux command line free disk space’ ведёт на статью ‘5 Linux commands to check free disk space’. Что? 5 способов узнать свободное место на диске? Зачем мне 5 способов, когда у меня всего лишь один диск. :)(:
Ну ладно. df -h выглядит как то, что нужно.
Запускаем, и...
Filesystem      Size  Used Avail Use% Mounted on
udev            952M     0  952M   0% /dev
tmpfs           197M  1.8M  196M   1% /run
/dev/sda1        15G   11G  3.5G  76% /
tmpfs           984M     0  984M   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           984M     0  984M   0% /sys/fs/cgroup
/dev/loop0       15M   15M     0 100% /snap/gnome-characters/375
/dev/loop1      3.8M  3.8M     0 100% /snap/gnome-system-monitor/123
/dev/loop2      2.2M  2.2M     0 100% /snap/gnome-calculator/945
/dev/loop3      157M  157M     0 100% /snap/gnome-3-28-1804/110
/dev/loop4      1.0M  1.0M     0 100% /snap/gnome-logs/81
/dev/loop5      486M  486M     0 100% /snap/gnome-42-2204/120
/dev/loop6       45M   45M     0 100% /snap/gtk-common-themes/1440
/dev/loop7       55M   55M     0 100% /snap/core18/1650
/dev/loop8      165M  165M     0 100% /snap/gnome-3-28-1804/198
/dev/loop9      128K  128K     0 100% /snap/bare/5
/dev/loop10      56M   56M     0 100% /snap/core18/2785
/dev/loop11     1.5M  1.5M     0 100% /snap/gnome-system-monitor/184
/dev/loop12     141M  141M     0 100% /snap/gnome-3-26-1604/98
/dev/loop13     896K  896K     0 100% /snap/gnome-logs/119
/dev/loop14      74M   74M     0 100% /snap/core22/817
/dev/loop15     4.3M  4.3M     0 100% /snap/gnome-calculator/544
/dev/loop16      92M   92M     0 100% /snap/gtk-common-themes/1535
/dev/loop17     119M  119M     0 100% /snap/core/15511
/dev/loop18     512K  512K     0 100% /snap/gnome-characters/789
/dev/loop19     141M  141M     0 100% /snap/gnome-3-26-1604/111
tmpfs           197M   16K  197M   1% /run/user/121
vmhgfs-fuse     231G  216G   16G  94% /mnt/hgfs
tmpfs           197M   52K  197M   1% /run/user/1000

О-г-о. Ну надо же, сколько полезной информации выдала эта команда!

Напомню: у меня в системе всего один диск. А вот это вот всё к чему всё это?? Или предполагается, что продвинутые пользователи должны знать, что обозначает каждый "девайс"/‘точка монтирования’ в этом списке?

Или взять тот же Android. Зачем там внутренний storage разбит на такую кучу разделов? Если это упрощает жизнь разработчикам, то с дизайном операционной системы явно что-то не так.

В этом отношении дизайн Windows гораздо лучше ориентирован на пользователя: вместо непонятных точек монтирования используются логические диски. И в новой ОС я бы взял за основу эту же идею, только вместо буквенного названия дисков я предлагаю числовое, при этом диск 0 — это системный диск (аналог диска C в Windows).

Название для новой ОС я также предлагаю взять цифровое: 9os или просто 9.
[Почему именно 9? Ну, когда говорят 10-ка или 8-ка, то обычно подразумевают Windows. Но если Windows 8 и Windows 10 есть, то Windows 9 нету, так почему бы не использовать именно эту цифру.]

Безопасность


До сих пор существует нездоровая ситуация, когда операционную систему очень просто убить одной неверной командой, выполненной от имени администратора/суперпользователя. (Даже без дополнительного подтверждения и без ввода пароля.) Да, простого rm -rf / уже не достаточно, но с такой задачей справляется команда чуть подлиннее.
Более того, практически любая современная ОС без дополнительной настройки защищает только свои системные файлы, а не файлы пользователя, которые можно модифицировать или вообще удалить любой программой без прав администратора.

Как-то лет 10 назад я получив [бесплатно и навсегда] 100 Гб в Облаке Mail.ru решил обезопасить все свои файлы в облаке. (Одной из причин, вероятно, была возникшая как раз в то время ситуация, когда автоматическое обновление Яндекс.Диска с версии 1.1.5 на 1.1.6 или 1.1.7 частично убивало раздел с операционной системой.)
Т.к. я не использовал веб-интерфейс для заливки новых файлов в облако и использовал клиентское приложение только на одном компьютере, я решил вообще запретить клиентскому приложению mail.ru-облака изменять/удалять какие-либо файлы на моём компьютере [точнее, ноутбуке], а разрешить только читать [чтобы получить одностороннюю синхронизацию]. Я попробовал два способа [я опущу детали этой настройки, например, необходимо было оставить доступ к служебным файлам .cloud.db, .cloud_ss, .cloud_temp_* в каталоге с облаком], используя встроенные в Windows 7 возможности настройки прав доступа для каталогов и файлов (вкладка ‘Безопасность’ в свойствах каталога):
  1. Сперва я установил разрешение изменять/удалять любые файлы в каталоге C:\Cloud@Mail.Ru только от имени администратора. Тогда не только Облако Mail.ru, но и любая программа без привилегий не могла ничего испортить в этом каталоге. Но такое решение оказалось не удобным: загрузить например новые фотографии в папку было можно, а вот изменить (например, применить ‘поворот JPEG без потерь’) уже нет. С документами работать также было очень затруднительно.
  2. Тогда я решил добавить в систему специального пользователя, у которого нет прав, кроме чтения каталога C:\Cloud@Mail.Ru, и запускать Облако Mail.ru только от имени этого пользователя (используя команду runas). Но в итоге, я так и не смог заставить надёжно работать это решение так, как задумывалось: клиент mail.ru-облака не мог изменять/удалять мои файлы, но мог добавить новую папку в C:\Cloud@Mail.Ru, к которой он впоследствии имел уже полный доступ. Постоянно возникали какие-то мелкие проблемы при работе с этой папкой, о которых я сейчас уже не могу вспомнить, увы, но сейчас на другом ноутбуке после установки Облака Mail.ru я решил больше не заморачиваться с такой настройкой и оставить всё как есть, в надежде, что история, аналогичная произошедшей с ЯДом, никогда не повторится.

Вообще, я считаю, что если ОС спроектирована и настроена правильно, то какими бы не были криворукими [не имею в виду никого конкретно, это гипотетически] разработчики приложения синхронизатора, оно [это приложение] в принципе не должно иметь возможность причинить вред ни операционной системе, ни пользовательским файлам (ну, за исключением тех файлов, с которыми это приложение непосредственно работает). Ещё лучше, если безопасная работа ОС не потребует настройки, а будет по умолчанию.

Как это может выглядеть?
Что если все приложения будут запускаться по умолчанию в sandbox-контейнере, при этом контейнером будет являться… просто директория на диске. Т.е. при запуске любого приложения оно может делать что угодно только в пределах его директории (в том числе обновлять себя и синхронизировать файлы в данной директории, для чего приложению открыт [возможно, ограниченный] доступ к локальной сети и Интернет).
Если приложение — это онлайн-игра, то ей в общем-то ничего больше и не нужно — достаточно возможности обновлять свои файлы с данными/ресурсами и хранить локальные настройки игрового клиента (настройки игровые разумнее хранить на сервере).
Если приложение — это текстовый или графический и какой угодно редактор, то для возможности редактирования какого-либо файла вне своей директории приложение обязано вызвать системную функцию (аналог OpenFileDialog() или SHBrowseForFolder() в Windows), которая посредством системной службы отобразит окно выбора файла, где пользователь выберет тот файл, который он хочет отредактировать и после выбора файла приложение будет иметь возможность читать и писать только этот выбранный пользователем файл. Если редактор был открыт путём клика мышью на иконке файла соответствующего типа, то редактор также может читать и писать только этот файл. Операционная система будет хранить список последних открытых файлов и давать возможность читать/писать их редактору без подтверждения со стороны пользователя.
С утилитами командной строки можно поступить аналогично: предоставлять доступ на чтение и запись всем файлам, присутствующим в списке аргументов командной строки.

Или можно поступить немного хитрее: ввести разделение для каждой программы на быстрые директории и медленные директории. В медленных директориях все изменения сохраняются, при этом есть ограничение на характер и количество изменений в единицу времени (для того, чтобы пользователь мог проверить их и откатить при желании). В быстрых такого ограничения нет и изменения в них не фиксируются. В самом простом случае к быстрым директориям можно отнести директорию самой программы и системную директорию для временных файлов/кэша. А к медленным — все остальные директории внешние по отношению к директории выполняемой программы.

Есть ещё и такая идея: расширение файла должно определять не просто ‘программу, которая открывает файлы данного типа’, а ‘набор/множество программ, которые в принципе имеют право изменять файлы с таким расширением’. К примеру, изменять файлы с расширением .docx или .xlsx должно быть разрешено только ограниченному набору программ (офисных пакетов). Структура .docx или .xlsx файла достаточно сложная, это не plain text, и будет очень странно, если такой файл вдруг захочет модифицировать, скажем, программа-видеопроигрыватель [а такое может произойти, если пользователь ненароком установил расширение/плагин, содержащий, например, вирус-шифровальщик (ну или злоумышленник подменил плагин, встроив в него вредоносный код)]. Причём, если какая-то программа захочет модифицировать файл не своего типа, то нужно не выдавать окошко с ОК/Отмена, т.к. пользователи не всегда внимательно читают текст в таких окошках, а просто показывать информационное окно о том, что программа пыталась выполнить несанкционированную операцию и операция была отклонена, но если такую операцию действительно необходимо разрешить, тогда, уважаемый пользователь, соблаговолите залезть в настройки системы и руками добавить необходимое разрешающее правило.
Также должна быть возможность установить разрешение на модификацию некоторых файлов только для некоторой программы или программ. К примеру, я веду свои записи в небольшом количестве текстовых файлов, с которыми я работаю исключительно в Sublime Text. И я бы хотел иметь возможность добавить правило, работающее на уровне операционной системы, которое бы запрещало открывать соответствующий файл на запись (т.е. вызывать функцию CreateFile() с dwDesiredAccess установленным в GENERIC_WRITE) для всех процессов, кроме sublime_text.exe, который имеет определённую хэш-сумму и который лежит в определённой директории. Последнее нужно для того, чтобы злоумышленник не мог выполнить вредоносный плагин к Sublime Text, т.к. Sublime Text при запуске загружает плагины из своей директории и можно скопировать доверенный sublime_text.exe в отдельную директорию с вредоносным плагином. Но все нужные мне плагины к Sublime Text я пишу сам используя тот же Sublime Text, поэтому все файлы в директории с Sublime Text разумно разрешить [опять же на уровне операционной системы] редактировать только через Sublime Text.

Существует мнение, что на системном разделе не нужно хранить важные данные, чтобы в случае чего всегда можно было его отформатировать и легко переустановить систему. Я с таким мнением категорически не согласен. Во-первых, разделение физического диска на логические приводит к тому, что часть места остаётся недоступной для пользовательских данных с одной стороны [если на одном разделе свободно 20 Гб и на другом 20 Гб, то игрушку на 30 Гб поставить уже не получится], и с другой стороны есть риск нехватки места под систему в системном разделе, что приводит к серьёзной проблеме, т.к. свободно менять размеры непустых логических разделов [забирая место у одних и отдавая его другим] как правило нельзя. Во-вторых, я считаю, что операционной системе достаточно одной директории на диске. Зачем ей отдельный раздел? И в-третьих, переустановка системы потеряет все системные настройки и систему придётся настраивать заново, а то и переустанавливать программы. Все пользовательские настройки системы, как я считаю, должны лежать в понятном месте (в одной поддиректории внутри системной директории, к примеру), легко сохраняться/восстанавливаться (например переноситься со старого ноутбука на новый) и иметь поддержку версионирования "из коробки" — для этого настройки должны храниться в текстовом формате, дружественном для систем управления версиями (типа Git), чтобы можно было легко посмотреть какие конкретно изменения в настройках системы были сделаны за последнюю неделю например (и какая именно программа сделала эти изменения — это должно быть указано в commit message).

Неломающиеся символические ссылки


Жёсткие ссылки используют вместо "мягких"\soft из-за того, что последние ломаются. А что если сделать их неломающимися?
Концептуально символические ссылки в новой ОС я предлагаю реализовать в виде простого текстового файлика с расширением .~ [я думал использовать юникодный символ
Источник: https://habr.com/ru/articles/840072/


Интересные статьи

Интересные статьи

В этой статье мы исследуем потенциальные уязвимости конфиденциальности в устройствах Apple. В первой части мы расскажем о методике определения региона Apple ID без разрешений при помощи Smart App Ba...
Пользуйтесь шаблоном.Под катом — шаблон рекрутерской модели компетенций в формате «бери и пиши своё», на которую мы потратили примерно 2 квартала с командой и кучу нервных клеток, оставленных на обсуж...
После опубликования статьи, посвящённой требованиям Приказа №795 ФСБ России в редакции от 29 января 2021 года, меня не покидало чувство её незавершённости. Это чувство было связано с тем, что в статье...
Несколько месяцев назад мы обсуждали такое интересное явление под названием эволюционные анахронизмы, с помощью которых мы постарались объяснить причину того, почему у ав...
А вы знали, что вполне легитимный драйвер может дать злоумышленнику возможность прописаться в вашей системе надолго, оставаясь внутри даже после ее переустановки? Или превратить ваш компьютер в...