<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
	<channel>
		<title>Posts on Капсула Никиты Попова (ru)</title>
		<link>https://polyserv.xyz/posts/</link>
		<atom:link href="https://polyserv.xyz/posts/atom.xml" rel="self" type="application/atom+xml" />
		<description>Недавний контент в Posts на Капсула Никиты Попова</description>
		<generator>Hugo</generator>
		<language>ru</language>
		<copyright>POLYSERV BY MODERN HOME</copyright>
		<author> ()</author>
		<managingEditor> ()</managingEditor>
		<webMaster> ()</webMaster>
		<lastBuildDate>2025-10-06T12:54:56Z</lastBuildDate>
		<item>
			<title>Попечатаем?</title>
			<link>https://polyserv.xyz/posts/2025-03-31-lets-type/</link>
			<description>Прямо в Plan 9!</description>
			<itunes:summary type="html"><![CDATA[<h2 id="plan-typewriter">Plan &ldquo;Typewriter&rdquo;</h2>
<p>Спешу сообщить, что запустил проект по возвращению &ldquo;печатной машинки&rdquo; <strong>UNIX</strong> в <strong>Plan 9</strong>/<strong>9front</strong> - <strong>Plan &ldquo;Typewriter&rdquo;</strong><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.
Проект ориентирован на подготовку окружения, которое игнорирует мышь полностью и позволяет работать не убирая рук с клавиатуры.</p>
<blockquote>
<p>&ndash; Мы строили, строили и наконец построили! Да здравствуем мы, ура!</p></blockquote>
<p>Пока готов <strong>очень базово</strong> только оконник - <strong>nwm</strong>.
На данном этапе это форк <strong>rio</strong> из проекта <strong>9front</strong>, в который я добавил отрисовку панели навигации и обработку горячих клавиш.
При разработке интерфейса я вдохновлялся <strong>dwm</strong><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> - простой и лаконичный оконник для X-сервера.
Непосредственно от <strong>rio</strong> останется только работа с окнами и файловой системой.
По мере развития всё &ldquo;лишнее&rdquo; будет удаляться, чтобы уменьшить объём кода.</p>
<p>Идею я вынашивал около года.
Проект казался мне слишком сложным и неподъёмным.
Но в один день я решил сделать пару набросков отрисовки панели.
Дальше как-то само пошло&hellip;</p>
<p>На подходе также:</p>
<ul>
<li><strong>st</strong><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>/<strong>foot</strong><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>-подобный эмулятор терминала. Пока сделал только небольшие наброски и погружаюсь в технические детали.</li>
<li><strong>Emacs</strong><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>-подобный текстовый редактор, расширяемый (в перспективе) не просто своим диалектом <strong>Lisp</strong>, а полноценным <strong>Scheme</strong> (пока не решил который использовать).
По мере готовности всё будет публиковаться на сайте проекта.</li>
</ul>
<h2 id="acme-off">Acme: OFF</h2>
<p>Acme (по задумке разработчиков) представляет из себя интерфейс системы.
Ведь если всё файл и большинство из них с текстом, то для работы с системой нужен только текстовый редактор.
Но что я не могу принять, так это очень ограниченную поддержку клавиатуры.
Редактор слишком ориентирован на мышь.
Также в нём отсутствует подсветка синтаксиса.
Идея в том, чтобы не писать настолько сложный код, чтобы нужна была подсветка синтаксиса.
Если вы планируете ограничивать написание кода &ldquo;Hello, world!&rdquo; приложениями, то его возможностей должно вполне хватать.
Но мало кто сможет сказать, что код, например, <strong>rio</strong> - простой.</p>
<p>Так что при разработке я использовал <strong>Emacs</strong> и сразу тестировал код в <strong>9front</strong>.
А помогал мне в этом <strong>drawterm</strong>.
При подключении к <strong>Plan 9</strong> через <strong>drawterm</strong> локальная  файловая система машины монтируется в текущее окружение.
Все файлы доступны абсолютно прозрачно.
Просто переходите в нужную директорию, компилируете и запускаете.</p>
<h2 id="удивительный-c">Удивительный C</h2>
<p>В процессе работы я обнаружил кое-что очень интересное в <strong>Plan 9</strong> диалекте <strong>C</strong> - встраиваение структур.
Мы привыкли, что в <strong>C</strong> использовать одну структуру внутри другой можно двумя способами.</p>
<ol>
<li>В виде переменной:</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> A {
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">int</span> x;
</span></span><span style="display:flex;"><span>};
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> B {
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">struct</span> A a;
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div><p>После этого мы можем получать доступ к полю из структуры <code>A</code> через <code>b.a.x</code>.</p>
<ol start="2">
<li>Как анонимную структуру:</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> B {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">struct</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">int</span> x;
</span></span><span style="display:flex;"><span>    };
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div><p>Оба варианта выглядят хоть и очень гибко, но немного громоздко.
Особенно это ощущается при большом уровне вложенности структур в крупных проектах и длинных именах полей.</p>
<p>Но в <strong>Plan 9</strong> диалекте <strong>C</strong> разработчики не оглядывались назад.
Позже они перенесут это поведение в <strong>Go</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> A {
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">int</span> x;
</span></span><span style="display:flex;"><span>};
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> B {
</span></span><span style="display:flex;"><span>	A;
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div><p>Теперь поле <code>x</code> доступно как родное через <code>b.x</code>.
И знаете что, с этим очень приятно и удобно работать.
Особенно после <strong>Go</strong>.
Появляется небольшой флёр ООП (в хорошем смысле слова).</p>
<h2 id="что-дальше">Что дальше?</h2>
<p>До релизов 1.0 приложения я доведу наверняка (не значит быстро).
Проект буду развивать по мере сил и времени.
Как и всегда не откажусь от советов и рекомендаций.
На этом этапе самая главная помощь, которую вы можете оказать проекту - распространнение информации и коммиты/патчи.
Да, сейчас проект на очень ранней стадии.
Но я и не говорил, что это готовое Production-ready ПО.</p>
<p>Главная цель этой публикации - внимание и без того узкого сообщества.
Может где-то есть эти 3.5 человека, которые хотели видеть в <strong>Plan 9</strong> то, к чему привыкли на своих <strong>UNIX</strong> машинках.</p>
<p>Если вы есть - отзовитесь!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://plantypewriter.tech/">https://plantypewriter.tech/</a> Plan &ldquo;Typewriter&rdquo;&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="http://dwm.suckless.org/">http://dwm.suckless.org/</a> dwm - dynamic window manager&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://st.suckless.org/">https://st.suckless.org/</a> st - simple terminal&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://codeberg.org/dnkl/foot">https://codeberg.org/dnkl/foot</a> foot - A fast, lightweight and minimalistic Wayland terminal emulator&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://www.gnu.org/software/emacs/">https://www.gnu.org/software/emacs/</a> GNU Emacs - An extensible, customizable, free/libre text editor — and more.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></itunes:summary>
			<category domain="https://polyserv.xyz/posts/">posts</category>
			<guid>https://polyserv.xyz/posts/2025-03-31-lets-type/</guid>
			<pubDate>2025-03-31T19:00:00Z</pubDate>
		</item>
		<item>
			<title>Человек и Сеть</title>
			<link>https://polyserv.xyz/posts/2025-03-09-man-and-web/</link>
			<description>Полуночные мысли</description>
			<itunes:summary type="html"><![CDATA[<blockquote>
<p>Ни в коем случае не претендую на истину.
Возможно, вовсе где-то сильно заблуждаюсь.
Но публикую чтобы поделиться своими мыслями и понять себя.</p></blockquote>
<p>В последнее время всё чаще задумываюсь о сути Сети как об отражении Человека.
По своей природе человек, как и Сеть, децентрализован.
И там и там есть как вертикальные (начальство, города, узловые маршрутизаторы), так и горизонтальные (близкие, соседи, локальные сети) связи.
Не потому ли изначальная Сеть так легко наложилась на общество и была принята?</p>
<p>Изначальная суть была проста - вот горстка протоколов, которые позволяют передавать информацию между узлами.
От человека к человеку, от терминала к мейнфрейму, от рабочего к начальнику цеха, от компьютера к компьютеру, и так далее.
Тут аналогий можно приводить очень много.
Но если вертикальные связи в человеческом обществе имеют достаточно опосредованное воздействие на горизонтальные (вы не перестанете кого-либо любить, если вам прикажут), то в сетях горизонтальные связи чрезвычайно тяжело поддерживаются.
Технологии не идеальны и плохо отражают то, как человек строит связи в реальном мире.
Мы можем с кем-либо познакомиться в сети, общаться, состоять в сообществах, но мы зависим от площадки, где это общение происходит.
Игровой ли это сервер, форум, социальная сеть.
Просто подумайте многие ли из Вас знают почту своих друзей на случай, если WhatsApp ил Telegram закроются.
В лучшем случае номер сотового телефона.</p>
<p>Немаловажным является и тот факт, что человек не склонен воспринимать связи в сети хоть сколько-нибудь похожими на реальные.
Вы скорее познакомитесь с людьми на концерте, чем в комментариях под видео или публикацией.
И этот более низкий вес связей в Сети сложно осуждать, ведь человечество живёт с ними не так долго.
Вот вы общаетесь с людьми, укрепляете свою связь на основе интересов.
Но внезапно человек пропадает, других его контактов у Вас нет.
Ему могло просто стать скучно, и он перестал заходить на платформу на некоторое время.
А вы, не зная этого, решили, что он покинул ресурс навсегда, и тоже уходите.
Возможно, именно поэтому мы все тянемся к большим ресурсам, где &ldquo;сидят все друзья&rdquo;.</p>
<p>Но вернёмся к протоколам.
Вот, например RSS<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> и Atom<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, чрезвычайно простые протоколы, о которых люди почти ничего не знают.
Их суть в том, чтобы донести до людей новости в простой форме.
Не нужно заходить на понравившийся сайт или блог, чтобы узнать были ли новости.
RSS-читалка сама получит все обновления, и сообщит вам о них.
Но простота получения этих новостей децентрализовано помогла крупным новостным агрегаторам также получать эти новости, публиковать их у себя и, тем самым, увеличивать и без того немалую аудиторию.
Человек ведь прост и неприхотлив, он не будет проверять первоисточник.
Тем самым появляются две прекрасные возможности.
Во-первых, публиковать полуправду или ложь.
Во-вторых, не публиковать что-то вовсе.
И мы получаем цензуру и навязывание мнения по вектору редакционной политики.
То есть то, что изначально было призвано привнести независимость людям было использовано против них, в угоду в лучшем случае корыстным интересам.</p>
<p>И вот мы попадаем в ситуацию, когда при кажущемся изобилии информации мы оказываемся в информационном коконе, о котором даже не подозреваем.
Для равновесия у нас есть, например, целых три разных мнения об одном и том же событии.
Остальные до Вас были профильтрованы, переварены и переодеты в другой вид.
Вы об этом даже не узнаете, ведь врать и манипулировать люди научились задолго до появления Сети.</p>
<p>Кроме RSS и Atom были и другие попытки.
Самая удачная из них, конечно же, электронная почта.
Тут без вариантов.
Она появилась много раньше, чем крупные компании поняли, как подминать под себя такие технологии.
И ввиду планомерного роста электронной почты сейчас они попали в ситуацию, когда терять обратную совместимость для них очень уж рискованная затея.
Пожалуй, это один удачный пример протокола, который не смогли покорить и поджать под себя.
Но несмотря на это они не прекращают попыток сделать клуб почты &ldquo;для своих&rdquo; и продолжают навязывать нам &ldquo;новые&rdquo; и &ldquo;безопасные&rdquo; расширения протокола.
Одни только пляски с удостоверяющими центрами сертификации и PTR-записями чего стоят.
Я уже молчу о теневой блокировке 25-го TCP порта провайдерами.</p>
<p>Меньше всего повезло XMPP/Jabber<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.
Кто-то вообще о нём помнит?
И не удивительно, ведь целый Google приложил немало сил, чтобы подавить его использование.
Запрет?
Блокировка?
Хитрее!
Старая добрая тактика: не можешь победить - возглавь.
Они запустили свой крупный XMPP сервис.
Такой же бесплатный сыр, как и Gmail, но который было намного проще схлопнуть.
Дело в том, что держать XMPP сервер достаточно сложно и затратно.
Для этого необходимо довольно крупное хранилище для историй чатов, стабильное соединение, круглосуточная работа сервера.
Держать его для себя одного могли только гики.
В основном люди регистрировались на крупных узлах, которые то и дело падали, люди уходили на другие.
Так было, пока не сцену не вышел Google.
И действительно, уж они то смогут обеспечить поддержку пользователей.
Крупные узлы начали закрываться из-за оттока пользователей.
А вскоре и сам Google прикрыл поддержку из-за &ldquo;низкого спроса&rdquo;.
Что вы можете сделать против Google?
Самое смешное в этом то, что XMPP/Jabber всё ещё используется.
Вот только вы об этом не знаете.
Ведь вам всё равно как работает WhatsApp.
История с RSS повторилась, причём почти один в один.
Также было и с личными сайтами и блогами: просто переходите на хостинг или платформу.
И в итоге мы имеем по пальцам пересчитать компаний, ресурсами которых пользуются ну уж если не 90%, то уж точно 70% планеты.</p>
<p>Люди на крупных платформах не принадлежат себе.
Их переписки читают, информация утекает и используется в анализе поведения, таргетированной рекламе, обучении нейросетей без их согласия.
Их могут заблокировать в любую минуту автоматически за &ldquo;неправильную&rdquo; с точки зрения платформы фразу.
И даже несмотря на огромное количество людей на этих платформах, все они крайне одиноки.
Ведь, как я уже говорил, ценность виртуальной связи намного ниже реальной.
Иметь миллион подписчиков или 100 друзей, что выберете?
Причём чем больше у вас подписчиков, тем меньше вы себе принадлежите.
Исчезает искренность, появляются спонсоры и рекламодатели.
Шаг влево - и вы изгой без финансирования.
Заказная статья, немного подправленных фактов - завтра же о вас никто не вспомнит.
Но что ещё хуже, вы ведь не общаетесь.
Это суррогат.
С одной стороны - производитель контента.
С другой - потребитель.
Нет любви, нет доверия.
Просто производство и потребление.
Точный расчёт.
Разве так бывает в реальной жизни?
Нет, вы, конечно, можете привести примеры их разряда &ldquo;такой спокойных, общительный, а оказался маньяк&rdquo;, но это уже передёргивание.
Чаще всего люди, которые знают вас лично, либо вовсе не поверят в клевету на вас, либо спросят у вас вашу позицию по ситуации.
Правда и искренность редко бывают действительно одиноки.</p>
<p>Но какова цель разобщения нас ложным единством?
Боюсь ответа на этот вопрос я пока не знаю.
Знаю лишь одно - всё зависит от нас самих.
Да, это тяжело, держать свой почтовый сервер хотя бы для своей семьи.
Но это уже огромный шаг при достаточно малой цене.
И я понимаю простых людей, далёких от информационных технологий, и гиков, которым не интересна эта рутина.
Ведь так просто плыть по течению, чем стоять обособленно и тем более идти против.</p>
<p>Вообще моя мысль очень проста - протоколы могут только объединять и не могут быть злыми сами по себе.
Только в злых руках.
Так случилось с XMPP.
Так происходит с RSS.
И Вавилонские башни корпораций зародились не сами по себе.
Всему виной праздность и тщеславие людей.
&ldquo;Они дают мне бесплатно зарегистрироваться и общаться, всего-то редкая реклама&rdquo;.
Но реклама, которую вы видите, - это даже не половина того, что с вас получили.</p>
<p>Пусть внешне сети и изменились сходно с человечеством - племена, деревни, города - но по факту путь этот пройден не был.
Тут аналогия очень простая - революция 1917-го в России.
Из человека сделать коммуниста насильно не смогли за 70 лет.
Даже социалисты получились так себе.</p>
<p>Каюсь, грешен.
Но я работаю над собой.
До недавнего времени я пробовал Fediverse, но обнаружил в нём все те же недостатки, что и на крупных платформах.
В данный момент для меня выглядит очень многообещающим протокол nostr<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.
Но наиболее чёткое отражение меня в сети на данный момент я нахожу в возвращении к изначальной сети - сайт, RSS и очень близкий мне по духу Plan 9.</p>
<p>Но я верю, что Люди смогут найти своё истинное отражение в Сети и Сеть перестанет быть Человеку чуждым и враждебным местом.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://ru.wikipedia.org/wiki/RSS">https://ru.wikipedia.org/wiki/RSS</a> RSS&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://ru.wikipedia.org/wiki/Atom">https://ru.wikipedia.org/wiki/Atom</a> Atom&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://xmpp.org/">https://xmpp.org/</a> XMPP&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://nostr.com/">https://nostr.com/</a> nostr&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></itunes:summary>
			<category domain="https://polyserv.xyz/posts/">posts</category>
			<guid>https://polyserv.xyz/posts/2025-03-09-man-and-web/</guid>
			<pubDate>2025-03-09T02:40:13Z</pubDate>
		</item>
		<item>
			<title>Установка Plan 9</title>
			<link>https://polyserv.xyz/posts/2024-11-02-plan-9-installation/</link>
			<description>Базовая установка и настройка файлового сервера и сервера авторизации</description>
			<itunes:summary type="html"><![CDATA[<p>Ввиду своей довольно уникальной архитектуры и используемых подходов установка <strong>Plan 9</strong> <strong>[а именно 9front]</strong> может вызвать множество вопросов даже у опытного системного администратора.
Большая часть этой статьи будет представлять из себя переработанную информацию из справки на сайте проекта<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.
Справка не раскрывает некоторые тонкие моменты, поэтому я постараюсь дополнить её своим опытом.
В процессе я буду использовать виртуальную машину KVM.</p>
<h2 id="подготовка">Подготовка</h2>
<blockquote>
<p>&ndash; Не хватай его сразу. Не хватай его сразу, Урри. Выясни сначала как он управляется. Выясни как он управляется сначала.</p>
<p>&ndash; Не понял, повторите.</p>
<p>&ndash; Узнай где у него кнопка!</p></blockquote>
<p>Перед началом вы должны ответить на несколько вопросов:</p>
<ul>
<li>Какую конфигурацию имеет ваша локальная сеть?</li>
<li>Какое оборудование установленно в вашей машине и поддерживается ли оно в ОС? <strong>[список поддерживаемого оборудования доступен на сайте проекта<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>]</strong></li>
<li>Какое имя будет у машины и вашего пользователя?</li>
</ul>
<p>Если у вас возникли трудности на этом этапе, то я советую вам прекратить и вернуться позже.
После того, как вы получили ответы на эти вопросы, мы можем идти дальше.</p>
<p>Для начала скачайте подходящий вам установочный <strong>ISO</strong> образ системы с сайта проекта<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> и создайте загрузочную флешку.
Если вы выбрали для первой попытки установку на виртуальную машину <strong>[что я вам и советую]</strong>, то просто примонтируйте к ВМ образ диска и начните закрузку.
Если всё было сделано правильно вы увидите процесс загрузки.</p>
<p>
<figure>
  <img src="/images/005_first_boot_1.png" alt="Первая загрузка" />
</figure>


</p>
<p>Также в процессе первой загрузки вам будут заданы несколько вопросов.
В большинстве можно остановиться на значениях по умолчанию <strong>[обычно указаны в квадратных скобках]</strong>, если они доступны.</p>
<h3 id="пользователь">Пользователь</h3>
<pre tabindex="0"><code> user[glenda]:
</code></pre><p>Предлагаемый пользователь по умолчанию - <strong>glenda</strong>.
Запуск системы на этой машине будет происходить под этим пользователем.
Такой пользователь в контексте <strong>Plan 9</strong> зовётся <strong>hostowner</strong> (владелец хоста).
Концепция корневого пользователя <strong>root</strong> была упразднена по причинам проблем с безопасностью.
Владелец хоста имеет высокие полномочия на конкретной машине, но ограничен в доступе к файлам других пользователей.
Для первой установки лучше его не менять.
Просто нажимаем <code>Enter</code>.</p>
<h3 id="vgasize-monitor-mouseport">vgasize, monitor, mouseport</h3>
<p>Следующими вопросами будут запрошены данные о дисплее и мыши:</p>
<pre tabindex="0"><code>vgasize is (text, 640x480x8, 1024x768x16, ...) [1024x768x16]
monitor is (vesa, xga, lcd, ...) [vesa]
mouseport is (ps2, ps2intellimouse, 0, 1, 2) [ps2]
</code></pre><p>На основании ответов будут установлены переменные окружения <code>$vgasize</code>, <code>$monitor</code> и <code>$mouseport</code>.
Эти значения также будут записаны в файл <code>plan9.ini</code>, из которого будут использоваться при последующий загрузках.</p>
<ul>
<li><code>monitor</code> - в любое значение, кроме <code>vesa</code> будет пропускать эмуляцию <strong>VESA BIOS</strong> и будет выполнятся попытка использования нативного драйвера <strong>VGA</strong> для видео карты.
Список поддерживаемых системой дисплеев и видео карт может быть найден в файле <code>/lib/vgadb</code>.
Дополнительную информацию вы можете найти на страницах справки <strong>vga(3)</strong>, <strong>vga(8)</strong> и <strong>vgadb(6)</strong>.</li>
<li><code>vgasize</code> - используется для хранения разрешения и разрядности дисплея.
Тут можете прописать любое значение, поддерживаемое вашим дисплеем.</li>
<li><code>mouseport</code> - Значение по умолчанию для <code>ps2</code> должно подходить в большинстве случаев.
При установке на ноутбук или при использовании мыши с колесом прокрутки может понадобиться выставить его в <code>ps2intellimouse</code>.</li>
</ul>
<p>После завершения загрузки вы можете изменить установленные значения в файле <code>plan9.ini</code>.</p>
<p>Пример содержимого <code>plan9.ini</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#a6e22e">monitor</span><span style="color:#f92672">=</span><span style="color:#e6db74">vesa</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">vgasize</span><span style="color:#f92672">=</span><span style="color:#e6db74">1024x768x16</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">mouseport</span><span style="color:#f92672">=</span><span style="color:#e6db74">ps2intellimouse</span>
</span></span></code></pre></div><p>
<figure>
  <img src="/images/005_first_boot_2.png" alt="Завершение первой загрузки" />
</figure>


</p>
<h3 id="запуск">Запуск</h3>
<p>После ответов на вопросы процесс загрузки попробует запустить стандартный графический мультиплексор <strong>rio</strong>, приветствующий вас серым рабочим столом с запущеным монитором нагрузки <strong>stats</strong> и окном с оболочкой <strong>rc</strong>.</p>
<p>
<figure>
  <img src="/images/005_livecdrio.jpg" alt="rio" />
  <figcaption>Безупречная серость.</figcaption>
</figure>


</p>
<p>Имейте ввиду, что если пользователь был изменён, то вы увидите просто серый экран.
Инициализация подготовлена только для пользователя <strong>glenda</strong>.
В остальных случаях система остаётся чистой.</p>
<h3 id="немного-об-управлении">Немного об управлении</h3>
<p>Для управления мультиплексером <strong>rio</strong> используется трёхкнопочная мышь.</p>
<ul>
<li>ЛКМ - указание фокуса и выделение, ничего особенного;</li>
<li>СКМ - контекстное меню, которое будет различаться для разных приложений;</li>
<li>ПКМ - меню <strong>rio</strong>, позволяет создавать, изменять и удалять окна.</li>
</ul>
<p>Приложения запускаются в окнах <strong>rio</strong>.
Но самое интересно, что в окне <strong>rio</strong> может быть запущен &hellip; <strong>rio</strong>.
И ещё. И ещё.</p>
<p>При работе с flash-накопителя для первого знакомства этого может быть достаточно.
Система будет созранять своё состояние как обычный live-образ любой другой ОС.
Так что вы можете перейти к следующим статьям цикла.</p>
<p>Если же вы достаточно исследовали live-образ <strong>Plan 9</strong> и чувствуете, что готовы к построению полноценной вычислительной сети <strong>[в контексте Plan 9 используется термин grid]</strong> - то мы продолжаем.</p>
<h2 id="установка-базовой-системы">Установка базовой системы</h2>
<p>Установка выполняется <strong>rc</strong>-сценарием <code>/rc/bin/inst</code>.
Чтобы начать установку выполните в терминале команду <code>inst/start</code>.</p>
<pre tabindex="0"><code>term% inst/start
</code></pre><p>Следуйте инструкциям, чтобы завершить установку, при необходимости выбрав значения по умолчанию.</p>
<p>Каждый шаг может быть пройден повторно путём ввода его имени в запросе.</p>
<p>
<figure>
  <img src="/images/005_inst_start.png" alt="Запуск сценария inst/start" />
</figure>


</p>
<p>Теперь перейдём к шагам установки.</p>
<h3 id="configfs">configfs</h3>
<p>Файловая система <code>cwfs64x</code> использует постоянное и временное хранилища на разных разделах.
Файловая система <code>hjfs</code> более однородна, но работает медленнее.
Если ваш диск менее 12 ГиБ, то вам необходимо выбрать <code>hjfs</code>.
В этом примере мы продолжим используя <code>cwfs64x</code>.</p>
<pre tabindex="0"><code>You can install the following types of systems:
    cwfs64x     the cached-worm file server
    hjfs        the new 9front file server (experimental!)
File system (cwfs64x, hjfs)[cwfs64x]:
</code></pre><p>
<figure>
  <img src="/images/005_configfs.png" alt="configfs" />
</figure>


</p>
<h3 id="partdisk">partdisk</h3>
<p>На этом шаге нам необходимо создать разделы.
Сценарий установки сообщит вам какие диски он смог обнаружить.</p>
<p>Выбираем тот, что не эмуляция оптического диска и жмём <code>Enter</code>.</p>
<pre tabindex="0"><code>The following disk devices were found.

sdC0 - QEMU DVD-ROM
    empty                  0 3916        (3916 cylinders, 29.99 GB)
  * p1

sdF0 -

Disk to partition (sdC0, sdD0)[no default]: sdF0
The disk you selected HAS NO master boot record on its first sector.
(Perhaps it is a completely blank disk.)
Shall we create a blank EFI partition table (GPT)
or install traditional DOS partition table (MBR)?
</code></pre><p>Диск у нас пустой, так что создадим свежую <strong>MBR</strong> таблицу.</p>
<pre tabindex="0"><code>Install mbr or gpt (mbr, gpt)[no default]: mbr

This is disk/fdisk; use it to create a Plan 9 partition.
If there is enough room, a Plan 9 partition will be
suggested; you can probably just type ’w’ and then ’q’.

cylinder = 8225280 bytes
</code></pre><p>В этом примере мы будем использовать весь диск.
Просто записываем предложенные изменения.</p>
<pre tabindex="0"><code>&gt;&gt;&gt; w
&gt;&gt;&gt; q
</code></pre><p>
<figure>
  <img src="/images/005_partdisk.png" alt="partdisk" />
</figure>


</p>
<h3 id="prepdisk">prepdisk</h3>
<p>Из-за особенностей <strong>CWFS</strong> нам необходимо выполнить дополнительное разбиения раздела на подразделы.</p>
<pre tabindex="0"><code>The following Plan 9 disk partitions were found.

/dev/sdF0/plan9
  empty                  0 62910477    (62910477 sectors, 29.99 GB)

Plan 9 partition to subdivide (/dev/sdC0/plan9)[no default]:
Use the Plan 9 partition created in the previous step. Type /dev/sdC0/plan9 and hit enter.
This is disk/prep; use it to subdivide the Plan 9 partition.
If it is not yet subdivided, a sensible layout will be suggested;
you can probably just type `w` and then `q`.

no plan9 partition table found
9fat 204800
nvram 1
other 8957953
fscache 8957953
fsworm 44789770
&gt;&gt;&gt;
</code></pre><p>И снова принимаем значения по умолчанию.</p>
<pre tabindex="0"><code>&gt;&gt;&gt; w
&gt;&gt;&gt; q
</code></pre><p>
<figure>
  <img src="/images/005_prepdisk.png" alt="prepdisk" />
</figure>


</p>
<h3 id="mountfs">mountfs</h3>
<p>Теперь, когда подразделы созданы, мы указываем как их монтировать и форматируем их.
Если предыдущие шаги прошли без проблем, то сценарий установки обнаружит созданные нами разделы самостоятельно.
Просто нажимаем <code>Enter</code> на каждом из вопросов.</p>
<pre tabindex="0"><code>The please choose your cwfs64x partitions

--rw-r----- S 0 glenda glenda 4586471936 Jul  4 13:28 /dev/sdC0/fscache

Cwfs cache partition (/dev/sdC0/fscache)[/dev/sdC0/fscache]:
--rw-r----- S 0 glenda glenda 22932362240 Jul  4 13:28 /dev/sdC0/fsworm

Cwfs worm partition (/dev/sdC0/fsworm)[/dev/sdC0/fsworm]:
--rw-r----- S 0 glenda glenda 4586471936 Jul  4 13:28 /dev/sdC0/other

Cwfs other partition (/dev/sdC0/other)[/dev/sdC0/other]:
</code></pre><p>Далее нам будет предложено форматировать (ream) раздел, соглашаемся.</p>
<pre tabindex="0"><code>Since this is a fresh install, we choose yes to ream (format) the file system:
Ream the file system? (yes, no)[no]: yes
Starting cwfs64x file server for /dev/sdC0/fscache
Reaming file system
bad nvram key
bad authentication id
bad authentication domain
nvrcheck: can’t read nvram
config: config: config: auth is now disabled
config: config: config: config: config: config: current fs is &#34;main&#34;
cmd_users: cannot access /adm/users
63-bit cwfs as of Wed Jul  4 00:59:30 2012
    last boot Tue Jul 17 13:34:57 2012
Configuering cwfs64x file server for /dev/sdC0/fscache
Mounting cwfs64x file server for /dev/sdC0/fscache
% mount -c /srv/cwfs /n/newfs
Mounting cwfs64x file server for /dev/sdC0/other
% mount -c /srv/cwfs /n/other other
</code></pre><p>
<figure>
  <img src="/images/005_mountfs.png" alt="mountfs" />
</figure>


</p>
<h3 id="confignet">confignet</h3>
<p>Пришло время сконфигурировать сеть.</p>
<pre tabindex="0"><code>We will configure the ethernet.

Please choose a method for configuring your ethernet connection.

    manual - specify IP address, network mask, gateway IP address
    automatic - use DHCP and SLAAC to automatically configure

Configuration method (manual, automatic)[automatic]:
</code></pre><p>
<figure>
  <img src="/images/005_confignet.png" alt="confignet" />
</figure>


</p>
<h4 id="автоматическое">автоматическое</h4>
<p>В этом примере я остановлюсь на автоматической конфигурации, так как у меня настроен <strong>DHCP</strong>.
Если вы также будете использовать <strong>DHCP</strong>, то не забудьте зарезервировать адрес на сервере.</p>
<p>Нажмите <code>Enter</code>, чтобы перейти к следующему шагу.</p>
<h4 id="ручная">ручная</h4>
<p>Ручная настройка не представляет сложности.
Необходимо просто указать <strong>IP</strong> адрес, маску сети, шлюз и <strong>DNS</strong> сервер.</p>
<pre tabindex="0"><code>Configuration method (manual, automatic)[automatic]: manual
ip address [no default]: 192.168.2.10
network mask [no default]: 255.255.255.0
gateway address [no default]: 192.168.2.1
dns server [192.168.2.1]:
starting ethernet manual config
</code></pre><h3 id="mountdist">mountdist</h3>
<p>Укажем сценарию установки где ему искать файлы для установки.</p>
<pre tabindex="0"><code>Please wait... Scanning storage devices...
    /dev/sdC0/9fat
    /dev/sdC0/data
    /dev/sdC0/fscache
    /dev/sdC0/fsworm
    /dev/sdC0/other
    /dev/sdD0/data

The following storage media were detected.
Choose the one containing the distribution.

    /dev/sdD0/data (iso9660 cdrom)

Distribution disk (/dev/sdD0/data, /dev/sdC0/fscache, /)[/]:
</code></pre><p>Образ CD уже примонтирован в корень, просто укажем <code>/</code> и жмём <code>Enter</code>.</p>
<pre tabindex="0"><code>% mount /srv/boot /n/distmedia

Which directory contains the distribution?

Location of archives [/]:
</code></pre><p>И снова, корень CD уже в корне системы, также укажем <code>/</code> и жмём <code>Enter</code>.</p>
<p>
<figure>
  <img src="/images/005_mountdist.png" alt="mountdist" />
</figure>


</p>
<h3 id="copydist">copydist</h3>
<p>На этом шаге будет производиться копирование файлов дистрибутива системы на сконфигурированные разделы.
Сценарий не отображает прогресс установки.
Следить за процессом можно лишь отслеживая нагрузку на мониторе <strong>stats(8)</strong>.
Процесс занимает от 5 минут до часа в зависимости от скорости работы вашего диска.</p>
<p>
<figure>
  <img src="/images/005_copydist_progress.png" alt="Прогресс copydist" />
</figure>


</p>
<p>По завершении вы должны увидеть следующее сообщение:</p>
<p>
<figure>
  <img src="/images/005_copydist.png" alt="Завершение copydist" />
</figure>


</p>
<p>Оно означает, что файлы системы успешно скопированы на целевые разделы.</p>
<h3 id="ndbsetup">ndbsetup</h3>
<p>Дадим нашему хосту имя.
По умолчанию будет назначено <strong>cirno</strong>.</p>
<pre tabindex="0"><code>Setup network configuration

sysname [cirno]: test-fs
</code></pre><p>
<figure>
  <img src="/images/005_ndbsetup.png" alt="ndbsetup" />
</figure>


</p>
<h3 id="tzsetup">tzsetup</h3>
<p>Настраиваем часовой пояс.</p>
<pre tabindex="0"><code>Setup Time Zone

Time Zone (Argentina, Australia_ACT, Australia_Broken-Hill,
Australia_LHI, Australia_NSW, Australia_North, Australia_Queensland,
Australia_South, Australia_Sturt, Australia_Tasmania,
Australia_Victoria, Australia_West, Australia_Yancowinna, Brazil_Acre,
Brazil_DeNoronha, Brazil_East, Brazil_West, CET, Canada_Atlantic,
Canada_Central, Canada_East-Saskatchewan, Canada_Eastern,
Canada_Mountain, Canada_Newfoundland, Canada_Pacific, Canada_Yukon,
Chile_Continental, Chile_EasterIsland, Cuba, EET, Egypt, GB-Eire, GMT,
HST, Hongkong, Iceland, Iran, Israel, Jamaica, Japan, Libya,
Mexico_BajaNorte, Mexico_BajaSur, Mexico_General, NZ, NZ_CHAT, Navajo,
PRC, Poland, ROC, ROK, Singapore, Turkey, US_Alaska, US_Arizona,
US_Central, US_East-Indiana, US_Eastern, US_Hawaii, US_Michigan,
US_Mountain, US_Pacific, US_Yukon, W-SU, WET)[US_Eastern]: GMT
</code></pre><p>Вводим наиболее подходящий нам из списка и жмём <code>Enter</code>.</p>
<p>
<figure>
  <img src="/images/005_tzsetup.png" alt="tzsetup" />
</figure>


</p>
<h3 id="bootsetup">bootsetup</h3>
<p>Настройка загрузки системы.</p>
<pre tabindex="0"><code>Setup Plan 9 FAT boot partition (9fat)

Plan 9 FAT partition (/dev/sdC0/9fat)[/dev/sdC0/9fat]:
</code></pre><p>Принимаем значение раздела загрузки по умолчанию.</p>
<p>Все переменные окружения, указанные при первом запуске, сейчас будут сохранены в <code>/n/9fat/plan9.ini</code>.
Также ядро системы будет скопировано в раздел <strong>9fat</strong>.</p>
<pre tabindex="0"><code>dossrv: serving /srv/dos
Initializing Plan 9 FAT partition.

% disk/format -r 2 -d -b /386/pbs /dev/sdC0/9fat
Initializing FAT file system
type hard, 12 tracks, 255 heads, 63 sectors/track, 512 bytes/sec
used 4096 bytes
% mount -c /srv/dos /n/9fat /dev/sdC0/9fat
% rm -f /n/9fat/9bootfat /n/9fat/plan9.ini /n/9fat/9pc
% cp /n/newfs/386/9bootfat /n/9fat/9bootfat
% chmod +al /n/9fat/9bootfat
% cp /tmp/plan9.ini /n/9fat/plan9.ini
% cp /n/newfs/386/9pc /n/9fat/9pc

If you use the Windows NT/2000/XP master boot record
or a master boot record from a Unix clone (e.g., LILO or
FreeBSD bootmgr), it is probably safe to continue using
that boot record rather than install the Plan 9 boot record.
</code></pre><p>Так как в нашем случае нет соседней системы мы выбираем запись <strong>Plan 9</strong> в главную загрузочную область и помечаем раздел активным.</p>
<pre tabindex="0"><code>Install the Plan 9 master boot record (yes, no)[no default]: yes
Mark the Plan 9 partition active (yes, no)[no default]: yes

The Plan 9 partition is now marked as active.
</code></pre><p>
<figure>
  <img src="/images/005_bootsetup.png" alt="bootsetup" />
</figure>


</p>
<h3 id="finish">finish</h3>
<p>Последний шаг отключит образ CD и завершит работу.
Подтверждаем нажатием клавиши <code>Enter</code> для перезагрузки компьютера.</p>
<p>Ваша первая установка <strong>9front</strong> завершена.</p>
<p>Поздравляю!</p>
<h2 id="настройка-сервера-авторизации-и-файлового-сервера">Настройка сервера авторизации и файлового сервера</h2>
<p>Основано на этом примере - <a href="https://www.youtube.com/watch?v=wRpCnHTTbGU" title="Auth &amp; File Server Setup, using 9front">youtube</a>.</p>
<p>Выполнить этот шаг будет немного сложнее.
Но его нужно выполнить только единожды, чтобы официально запустить файловый сервер.
Здесь много зависимых этапов, и их нужно выполнить правильно, чтобы все работало.
Поскольку у нас будет комбинация сервера авторизации и файлового сервера, нам нужно будет настроить обе эти системы.</p>
<p>Авторизация будет выполнять проверку паролей, а файловая система будет следить за тем, чтобы у пользователей был доступ к нужным файлам.
Первое, что необходимо сделать, это установить владельца хоста для системы.
Разработчики <strong>Plan 9</strong> отказались от использования корневого пользователя <strong>root</strong>, поскольку это было связано с очевидными проблемами безопасности.
Вместо этого у каждой системы есть назначенный владелец хоста (<strong>host owner</strong>).
Владелец хоста обладает неограниченной властью над любыми процессами, выполняемыми в системе, которой он владеет.
Таким образом, владелец хоста может отключить процессы и получить доступ практически ко всему оборудованию.</p>
<p>В случае с файловым сервером владелец хоста не имеет безграничного доступа к файлам.
Только в особом случае, когда владелец хоста загружается в консольном режиме с отключенной авторизацией.</p>
<h3 id="настройка-nvram">Настройка NVRAM</h3>
<p>Мы уже видели раздел <strong>NVRAM</strong> <a href="#prepdisk">ранее</a>, это небольшая часть хранилища, называемая <strong>Энергонезависимой оперативной памятью</strong> (<strong>Non-Volatile RAM</strong>) по историческим причинам, и она содержит токен пароля для владельца хоста.
Это позволяет системе загружаться с авторизацией без необходимости вводить пароль в командной строке загрузки.
Чтобы убедиться, что система использует его, я добавлю его в <code>plan9.ini</code>.
Некоторые системы делают это автоматически, но я просто хочу быть уверенным.</p>
<p>Итак, давайте смонтируем раздел <strong>9fat</strong>.</p>
<pre tabindex="0"><code>% 9fs 9fat
% sam /n/9fat/plan9.ini
</code></pre><p>Здесь мы можем указать, откуда взять раздел <strong>NVRAM</strong>, и это также может быть задано в виде файла.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#a6e22e">bootfile</span><span style="color:#f92672">=</span><span style="color:#e6db74">9pc64</span>
</span></span><span style="display:flex; background-color:#3c3d38"><span><span style="color:#a6e22e">nvram</span><span style="color:#f92672">=</span><span style="color:#e6db74">/dev/sdF0/nvram</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">bootargs</span><span style="color:#f92672">=</span><span style="color:#e6db74">local!/dev/sdF0/fscache</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">mouseport</span><span style="color:#f92672">=</span><span style="color:#e6db74">ps2</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">monitor</span><span style="color:#f92672">=</span><span style="color:#e6db74">vesa</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">vgasize</span><span style="color:#f92672">=</span><span style="color:#e6db74">1024x768x16</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">tiltscreen</span><span style="color:#f92672">=</span><span style="color:#e6db74">none</span>
</span></span></code></pre></div><p>И теперь мы перезагрузим систему, чтобы это вступило в силу.</p>
<pre tabindex="0"><code>% fshalt -r
</code></pre><h3 id="запись-в-nvram">Запись в NVRAM</h3>
<p>Теперь мы перезагрузили систему с указанным разделом <strong>NVRAM</strong>, и следующим шагом будет запись в него.</p>
<ul>
<li><code>authid</code> - будет указывать владельца хоста, которым будет <strong>glenda</strong>.</li>
<li><code>authdom</code> - в данном случае запрашивается доменное имя.
Если вы используете доменное имя, просто укажите его.
Если нет - укажите что-нибудь в качестве заглушки.</li>
<li><code>secstore key</code> - используется для другой системы авторизации, и я пока не буду его использовать.
Нажмите <code>Enter</code> и оставьте поле пустым.</li>
<li><code>password</code> - пароль для пользователя <strong>glenda</strong>.</li>
</ul>
<pre tabindex="0"><code>% auth/wrkey
authid: glenda
authdom: testdom
secstore key:
password:
</code></pre><p>Вот и все.</p>
<h3 id="добавление-пользователей-в-авторизацию">Добавление пользователей в авторизацию</h3>
<p>Следующим шагом будет добавление пользователя <strong>glenda</strong> в систему авторизации, и мы также добавим в неё обычного пользователя.
Итак, сначала нам нужно убедиться, что у нас есть доступ к ключам.</p>
<pre tabindex="0"><code>% auth/keyfs
</code></pre><p>Итак, мы начнём с пользователя <strong>glenda</strong>:</p>
<ul>
<li><code>Password</code> - введите тот же пароль;</li>
<li><code>Confirm password</code> - и ещё раз;</li>
<li><code>assign new Inferno/POP secret? [y/n]: n</code> - пока не важно, просто установите значение &ldquo;нет&rdquo;;</li>
<li><code>Expiration date (YYYYMMDD or never)[never]:</code> не будем беспокоиться о сроке истечения, установите значение &ldquo;никогда&rdquo;;</li>
<li><code>Post id:</code>, <code>User's full name:</code>, <code>Department #:</code>, <code>User's email address:</code>, <code>Sponsor's email address:</code> - это если у вас в офисе полно людей.</li>
</ul>
<pre tabindex="0"><code>% auth/changeuser glenda
Password:
Confirm password:
assign new Inferno/POP secret? [y/n]: n
Expiration date (YYYYMMDD or never)[never]:
Post id:
User&#39;s full name:
Department #:
User&#39;s email address:
Sponsor&#39;s email address:
user glenda installed for Plan 9
</code></pre><p>Вот так-то.
<strong>glenda</strong> теперь добавлена как пользователь.
И я добавлю обычного пользователя <strong>testuser</strong>.
В основном параметры все те же.</p>
<pre tabindex="0"><code>% auth/changeuser testuser
Password:
Confirm password:
assign new Inferno/POP secret? [y/n]: n
Expiration date (YYYYMMDD or never)[never]:
Post id:
User&#39;s full name:
Department #:
User&#39;s email address:
Sponsor&#39;s email address:
user testuser installed for Plan 9
</code></pre><h3 id="добавление-пользователей-в-файловую-систему">Добавление пользователей в файловую систему</h3>
<p>Следующим шагом будет добавление нашего нового <strong>testuser</strong> в файловую систему.
Пользователь <strong>glenda</strong> автоматически был указан в качестве одного из пользователей файловой системы при выполнении базовой установки.
И теперь нам нужно добавить <strong>testuser</strong>, чтобы он также мог владеть файлами.
Для этого нам нужно отправить команду на командный сервер файловой системы.</p>
<pre tabindex="0"><code>% echo newuser testuser &gt;&gt;/srv/cwfs.cmd
</code></pre><p>Итак, теперь новый пользователь <strong>testuser</strong> добавлен в файловую систему <strong>CWFS</strong>.</p>
<h3 id="настройка-сетевой-базы-данных">Настройка сетевой базы данных</h3>
<p>Следующий шаг - отредактировать файл сетевой базы данных, чтобы назначить эту систему в качестве сервера аутентификации и файлового сервера.
Этот файл находится в <code>/lib/ndb/local</code>.</p>
<p>Внизу файла у нас есть пример, который мы можем использовать:</p>
<pre tabindex="0"><code># example: adjust to fit your network
#auth=cirno authdom=9front
#ipnet=9front ip=192.168.0.0 ipmask=255.255.255.0
#	ipgw=192.168.0.1
#	dns=192.168.0.1
#	auth=cirno
#	dnsdom=9front
#	cpu=cirno
#	smtp=cirno
</code></pre><p>Так что нам просто нужно сделать нашу версию этой записи:</p>
<pre tabindex="0"><code>auth=test-fs authdom=testdom
ipnet=testdom ip=192.168.2.0 ipmask=255.255.255.0
	ipgw=192.168.2.1
	dns=192.168.2.1
	auth=test-fs
	fs=test-fs
	dnsdom=testdom
</code></pre><h3 id="редактирование-plan9ini">Редактирование <code>plan9.ini</code></h3>
<p>Теперь нам нужно добавить еще изменений в <code>plan9.ini</code>.
Из-за особенностей с <strong>CWFS</strong> нам нужно внести две правки.</p>
<ul>
<li>Во-первых, нужно скопировать файл <code>plan9.ini</code>, чтобы загрузить систему в режиме настройки и убедиться, что авторизация в файловой системе работает;</li>
<li>И нам также нужна окончательная конфигурация <code>plan9.ini</code>, чтобы сервер загружался нормально, без необходимости взаимодействия.</li>
</ul>
<p>Итак, давайте снова смонтируем <strong>9fat</strong> и сделаем копию текущего <code>plan9.ini</code> и еще одного, который мы будем использовать позже.</p>
<pre tabindex="0"><code>9fs 9fat
cp /n/9fat/plan9.ini /n/9fat/plan9.bak.ini
cp /n/9fat/plan9.ini /n/9fat/plan9.new.ini
</code></pre><p>Для существующего файла первое, что нам нужно сделать, это изменить его с терминала по умолчанию на <strong>CPU</strong> сервер.
А затем к параметрам загрузки мы добавим параметр <code>-c</code> для диска для файловой системы, и это переведет его в режим настройки.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#a6e22e">bootfile</span><span style="color:#f92672">=</span><span style="color:#e6db74">9pc64</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">nvram</span><span style="color:#f92672">=</span><span style="color:#e6db74">/dev/sdF0/nvram</span>
</span></span><span style="display:flex; background-color:#3c3d38"><span><span style="color:#a6e22e">service</span><span style="color:#f92672">=</span><span style="color:#e6db74">cpu</span>
</span></span><span style="display:flex; background-color:#3c3d38"><span><span style="color:#a6e22e">bootargs</span><span style="color:#f92672">=</span><span style="color:#e6db74">local!/dev/sdF0/fscache -c</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">mouseport</span><span style="color:#f92672">=</span><span style="color:#e6db74">ps2</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">monitor</span><span style="color:#f92672">=</span><span style="color:#e6db74">vesa</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">vgasize</span><span style="color:#f92672">=</span><span style="color:#e6db74">1024x768x16</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">tiltscreen</span><span style="color:#f92672">=</span><span style="color:#e6db74">none</span>
</span></span></code></pre></div><p>Для нового файла мы добавим опцию <code>-a tcp!*!564</code> в параметры диска.
Это сообщит системе, что она прослушивает <strong>TCP</strong> порт 564 для получения команд для подключения к файловой системе.
Это также будет <strong>CPU</strong> сервер, и мы изменим параметры загрузки на <code>nobootprompt</code>, чтобы он не просил нас нажимать <code>Enter</code>.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#a6e22e">bootfile</span><span style="color:#f92672">=</span><span style="color:#e6db74">9pc64</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">nvram</span><span style="color:#f92672">=</span><span style="color:#e6db74">/dev/sdF0/nvram</span>
</span></span><span style="display:flex; background-color:#3c3d38"><span><span style="color:#a6e22e">service</span><span style="color:#f92672">=</span><span style="color:#e6db74">cpu</span>
</span></span><span style="display:flex; background-color:#3c3d38"><span><span style="color:#a6e22e">nobootprompt</span><span style="color:#f92672">=</span><span style="color:#e6db74">local!/dev/sdF0/fscache -a tcp!*!564</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">mouseport</span><span style="color:#f92672">=</span><span style="color:#e6db74">ps2</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">monitor</span><span style="color:#f92672">=</span><span style="color:#e6db74">vesa</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">vgasize</span><span style="color:#f92672">=</span><span style="color:#e6db74">1024x768x16</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">tiltscreen</span><span style="color:#f92672">=</span><span style="color:#e6db74">none</span>
</span></span></code></pre></div><p>Итак, мы подготовили оба файла сейчас, потому что после перезагрузки системы графика будет отключена, поэтому не будет работать <strong>rio</strong>, и мы не сможем редактировать файлы с помощью <strong>acme</strong> или <strong>sam</strong>.
Вы можете использовать <strong>ed</strong>, но проще подготовить их сейчас и использовать просто <strong>mv</strong>, чтобы переименовать их позже.</p>
<h3 id="загрузка-в-роли-сервера">Загрузка в роли сервера</h3>
<p>Итак, мы перезагрузили систему, и вы можете видеть, что она ждет, когда я введу значение по умолчанию, которое имеет символ <code>-c</code>.</p>
<pre tabindex="0"><code>bootargs is (tcp, tls, il, local!device)[local!/dev/sdF0/fscache -c]
</code></pre><p>Нажмите <code>Enter</code>.</p>
<p>Далее появляется ввод <code>config</code>.
На этом этапе нам нужно ввести <code>noauth</code>.
Система сообщит, что авторизация отключена.</p>
<p>Я снова наберу <code>noauth</code>, и авторизация теперь включена.
Затем введите <code>end</code> и продолжайте загрузку системы.</p>
<pre tabindex="0"><code>config: noauth
auth disabled
config: noauth
auth enabled
config: end
</code></pre><p>Как вы можете видеть, <strong>rio</strong> не запущен.
Это просто приглашение командной строки.</p>
<p>Мы смонтируем раздел <strong>9fat</strong> и переместим файл <code>plan9.ini</code> с параметром конфигурации.
А затем переместите наш новый файл <code>plan9.ini</code> и перезагрузите систему еще раз.</p>
<pre tabindex="0"><code># 9fs 9fat
# cd /n/9fat/
# mv plan9.ini plan9.config.ini
# mv plan9.new.ini plan9.ini
# fshalt -r
</code></pre><p>Теперь вы можете выключить систему, а затем отключить монитор, клавиатуру и мышь и загрузить ее обратно.</p>
<p>Она будет спокойно работать и ждать запросов к файловому серверу.</p>
<h3 id="подключение">Подключение</h3>
<p>Теперь вам нужен <strong>drawterm</strong><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> в вашей основной системе для подключения к файловому серверу.</p>
<pre tabindex="0"><code>drawterm -h 192.168.2.10 -u testuser -a 192.168.2.10
</code></pre><p>Введите пароль пользователя и вуаля!
Теперь вы подключены к файловому серверу.
Вы также можете получить доступ к файлам вашего локального компьютера в <code>/mnt/term</code>.
Это довольно полезно, вы можете написать какое-нибудь программное обеспечение в своем обычном текстовом редакторе и протестировать его в среде <strong>Plan 9</strong> без копирования каких-либо файлов.</p>
<p>На этом настройка фалового сервера с авторизацией завершена.</p>
<p>В последующих статьях мы подробней остановимся на применении <strong>Plan 9</strong>, работе в среде и расширении нашей сети.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://fqa.9front.org/fqa4.html">https://fqa.9front.org/fqa4.html</a> 9front FQA 4 - 9front Installation Guide&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://fqa.9front.org/fqa3.html">https://fqa.9front.org/fqa3.html</a> 9front FQA 3 - Hardware&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://9front.org/releases/">https://9front.org/releases/</a> 9front - releases&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="http://git.9front.org/plan9front/drawterm/HEAD/info.html">http://git.9front.org/plan9front/drawterm/HEAD/info.html</a> drawterm&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></itunes:summary>
			<category domain="https://polyserv.xyz/posts/">posts</category>
			<guid>https://polyserv.xyz/posts/2024-11-02-plan-9-installation/</guid>
			<pubDate>2024-11-02T22:00:00Z</pubDate>
		</item>
		<item>
			<title>История Plan 9</title>
			<link>https://polyserv.xyz/posts/2024-10-31-plan-9-history/</link>
			<description>Прошлое и настоящее</description>
			<itunes:summary type="html"><![CDATA[<p>С момента разработки <strong>UNIX</strong>, программисты <strong>Bell Labs</strong> не сидели сложа руки.
Их следующим детищем стала распределенная операционная система <strong>Plan 9</strong>.</p>
<h2 id="предпосылки">Предпосылки</h2>
<p>К середине 80-х годов наметилась тенденция отхода от больших централизованных компьютеров, работающих в режиме разделения времени, на сети из небольших персональных машин <strong>[как правило, из рабочих UNIX-станций]</strong>.
Пользователи стремились перейти на небольшие системы, которые могли поддерживать сами не смотря потерю в вычислительной мощности.
Микрокомпьютеры становились быстрее и дешевле, и эти потери компенсировались.
Такой стиль вычислений остается достаточно популярным и в наши дни.</p>
<p>При переносе <strong>UNIX</strong> на персональные рабочие станции, однако, не были учтены некоторые имеющиеся недостатки и проблемы.
Операционная система <strong>UNIX</strong> была старой, монолитной и работала в режиме разделения времени.
Возможности ее адаптирования к новым технологиям, появившимся позже, были весьма ограничены.
Графические и сетевые возможности были добавлены к <strong>UNIX</strong> еще в период её расцвета и были плохо интегрированными архитектурно и, как следствие, ими было трудно управлять.</p>
<p>И самое важное, ранняя ориентация на персональные машины сделала невозможной беспроблемную работу сетей, характерную для старых монолитных систем с разделением времени.
Разделение времени и централизация управления позволяли амортизировать затраты для больших машин.
Но при появлении персональных вычислений до предела обострились проблемы администрирования.
Выбор старой операционной системы с разделением времени для работы на этих персональных машинах был бы неоправдан.</p>
<h2 id="начало">Начало</h2>
<p>Было решено создать ОС, более приспособленную к вызовам времени.
<strong>Plan 9</strong> зародилась в конце 1980-х годов, как новая система, призванная решить проблемы <strong>UNIX</strong>, которые разработчики посчитали <strong>&ldquo;слишком глубокими для того, чтобы исправлять&rdquo;</strong>.
При этом преследовались две цели:</p>
<ul>
<li>система, построенная из дешёвых современных микрокомпьютеров, должна была управляться централизованно;</li>
<li>и при этом быть недорогой.</li>
</ul>
<p>Идея заключалась в том, чтобы при построении вычислительной системы использовать не только рабочие станции.
Компьютеры должны соответствовать своей роли: маленькие дешёвые машины в офисах могли бы служить терминалами, обеспечивая доступ к большим, центральным, совместно используемым ресурсам, таким как вычислительные и файловые серверы.
Очевидными кандидатами на роль центральных машин представлялись появившиеся недавно многопроцессорные системы.</p>
<p>Проектом занялось специализированное подразделение <strong>Bell Labs</strong>, известное как <strong>&ldquo;Исследовательский центр компьютерных наук&rdquo; (CSRC)</strong>.
Фактически разработку вела та же команда, которая изначально трудилась над <strong>UNIX</strong> и языком программирования <strong>С</strong>: Кен Томпсон, Деннис Ритчи, Роб Пайк, Дэйв Пресотто и Фил Уинтерботт.
Да и концепцию было решено оставить прежнюю, максимально развив её.</p>
<p>Название ОС её создателям навеял трешёвый фильм ужасов <strong>&ldquo;План 9 из открытого космоса&rdquo;</strong> режиссёра Эдварда Вуда.
Маскот ОС - зайчиха <strong>Гленда</strong> - была названа в честь киноленты <strong>&ldquo;Глен или Гленда&rdquo;</strong> того же режиссёра.
Этим же именем в <strong>Plan 9</strong> нарекли пользователя по умолчанию.</p>
<p>
<figure>
  <img src="/images/004_glenda.jpg" alt="Гленда" />
  <figcaption>“Смотрите, у этого кролика злобный нрав шириной в милю! Это убийца!” – Тим Чародей</figcaption>
</figure>


</p>
<p>К 1989 году система стала настолько устойчивой, что ее начали использовать в качестве единственной среды вычислений в лаборатории.
Это означало необходимость перенести многие службы и приложения, которые ранее применялись в <strong>UNIX</strong>.
Исследователи использовали эту возможность, чтобы пересмотреть многое в архитектуре ОС.
<strong>Plan 9</strong> имела новые компиляторы, языки, библиотеки, оконные системы и разнообразные новые приложения.
Многие из старых утилит были опущены, а те, что оставлены, написаны заново или отлажены.</p>
<p>Почему было необходимо пересмотреть всё до основания?
Различия между операционной системой, библиотекой и приложением важны для исследователей операционных систем, но неинтересны для пользователей.
Для них значение имеет только функциональность.
Создавая полностью новую систему, они смогли решить многие проблемы, которые должны были быть решены.
Например, в ядре отсутствует драйвер <strong>tty</strong>.
Он является результатом работы оконной системы в пространстве пользователя.
В современном мире вычислительные системы, в силу необходимости, являются многоархитектурными и составлены из продуктов разных поставщиков.
Однако обычные компиляторы и утилиты предполагают, что программа должна быть построена для работы в локальной среде.
Важнее, однако, то, что определенным тестом для системы служит операционная среда, которую она предоставляет.
Обеспечение большей эффективности при работе старых программ - &ldquo;рабочих лошадок&rdquo; <strong>UNIX</strong> - было только делом техники.
Гораздо более исследователи были заинтересованы в том, чтобы новые идеи, предлагаемые архитектурой новой системы, способствовали повышению эффективности работы.
Таким образом, хотя <strong>Plan 9</strong> обеспечивает среду эмуляции для выполнения команд <strong>POSIX</strong>, это не главное в системе.
Большая часть системного ПО разработана в нативной среде <strong>Plan 9</strong>.</p>
<p>Полностью обновленная система, безусловно, обладала определенными преимуществами.
Лаборатория имела опыт разработки контроллеров экспериментальных периферийных устройств.
Для того чтобы облегчить написание их драйверов, они хотели иметь систему, которая была бы доступна в виде исходных текстов <strong>[чего уже не могла гарантировать UNIX, даже в лаборатории, где она родилась]</strong>.
Кроме того, они хотели перераспределить работу.
ПО должно было создаваться децентрализованно. <strong>[напомню, git со товарищи ещё даже не задумывался, не говоря уже про CI/CD]</strong>
Например, они могли бы использовать для системы компиляторы <strong>С</strong> некоторых поставщиков.
Но, даже если бы они преодолели проблемы с кросс-компиляцией, у них возникли бы трудности с перераспределением результата этой работы.</p>
<h2 id="результат">Результат</h2>
<p>Базовая концепция <strong>Plan 9</strong> в том, что это - распределенная операционная система, не похожая на <strong>UNIX</strong>.
В ней сетевая функциональность расширена такими механизмами, как удаленный вход в систему и сетевая файловая система.
В <strong>Plan 9</strong> сетевая поддержка встроена в функционал ОС.
Например, все ресурсы, теоретически, могут быть прозрачно распределены в сети <strong>Plan 9</strong>.
Система скрывает от пользователя, что ресурсы не являются локальными.
<strong>Plan 9</strong> поддерживает не только файловые серверы, но также серверы авторизации, вычислений и этот список может быть расширен<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>Система была построена на трех принципах:</p>
<ul>
<li>Во-первых, ресурсы именуются и к ним можно получить доступ как к файлам в иерархической файловой системе;</li>
<li>Во-вторых, имеется стандартный протокол, называемый <strong>9Р</strong>, для доступа к этим ресурсам;</li>
<li>И, наконец, несвязанные иерархии, обеспечиваемые различными службами, соединяются вместе в единое личное иерархическое пространство имен файлов.</li>
</ul>
<p>Необычные свойства <strong>Plan 9</strong> обусловлены целенаправленным последовательным применением этих принципов.</p>
<p><strong>Plan 9</strong> основан на парадигме <strong>UNIX</strong> о том, что <strong>&ldquo;все является файлом&rdquo;</strong>.
Опираясь на огромную коллекцию дополнений, <strong>UNIX</strong> впитывал в себя все больше изменений, которые шли вразрез с с этим исходным, основополагающим принципом.
Примером этого является ужасный механизм сокетов, используемый для функций чтения и записи сетевых ресурсов, отличный от обычных файлов.
<strong>Plan 9</strong> кладет этому конец, предоставляя файлово-ориентированный интерфейс системы.
Например, <code>/net/tcp</code> и <code>/net/udp</code> для сетевых интерфейсов.
Большинство системных служб также следуют серверному принципу.
В <strong>Plan 9</strong>, например, нет обычной программы <code>ftp</code>.
Вместо этого <code>ftpfs</code> монтирует <strong>FTP-сервер</strong> в каталог <code>/n/ftp</code>.
Сервер <code>9660fs</code> ответственен за монтирование CD дисков.</p>
<p>Хотя <strong>Plan 9</strong> изначально предназначалась для работы с традиционными файлами, ее идеи были распространены и на многие другие ресурсы.
Службы по экспорту иерархий файлов включают устройства ввода/вывода, резервного копирования, оконную систему, сетевые интерфейсы и многое другое.
Модель файловой системы хорошо понятна как разработчикам систем, так и обычным пользователям, так что службы, имеющие файлово-подобные интерфейсы легко построить, понять и использовать.
Файлы поступают со знакомыми, унифицированными правилами защиты, именования и доступа (как локального, так и удаленного).
Поэтому службы, построенные таким образом, готовы для использования в распределенных системах.
В этом заключается отличие от объектно-ориентированных моделей, где с этими аспектами приходится заново иметь дело для каждого класса объектов.
В последующих статьях будут приведены примеры, иллюстрирующие эти идеи на практике.</p>
<p>Одним из примеров может быть команда файловой системы <code>/proc</code>, которая обеспечивает ясный способ исследования текущих процессов и управления ими.
<strong>Plan 9</strong> был первой ОС, осуществившей поддержку файло-ориентированной системы управления процессами <code>proc</code>.
Прекурсорные системы имеют в основе подобную же идею<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, однако в <strong>Plan 9</strong> метафора файлов развита много дальше<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.
Позже <code>/proc</code> была интегрирована и в <strong>GNU/Linux</strong>.</p>
<p>В <strong>Plan 9</strong> основную сетевую функциональность осуществляет протокол <strong>9P</strong>, в состав которого входит около 30 управляющий сообщений.
Реализация <strong>9P</strong> в <strong>GNU/Linux</strong> была добавлена в основное ядро начиная с версии <strong>2.6.14</strong>, этим были устранены любые препятствия во взаимодействии <strong>GNU/Linux</strong> и <strong>Plan 9</strong>.
Протокол <strong>9Р</strong> структурирован как набор транзакций, каждая из которых посылает запрос от процесса клиента локальному или удаленному серверу и возвращает результат.
<strong>9Р</strong> контролирует файловую систему, а не только файлы.
Он включает процедуры для различения имен файлов и преобразования иерархии имен файловой системы, предоставляемой сервером.
С другой стороны, в отличие от таких систем, как Sprite<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, пространство имен пользователя поддерживается только системой клиента, а не на сервере или с его помощью.
Кроме того, доступ к файлам происходит на уровне байтов, а не блоков, что отличает <strong>9Р</strong> от таких протоколов, как <strong>NFS</strong> и <strong>RFS</strong>.</p>
<p>Обычная инсталляция <strong>Plan 9</strong> состоит из ряда компьютеров, соединенных в сеть и предоставляющих каждый услуги определенного класса.
Совместно используемые многопроцессорные серверы обеспечивают выполнение вычислительных циклов.
Другие большие машины служат хранилищами файлов.
Эти машины были расположены в помещении с кондиционированием воздуха и соединены высокопроизводительной сетью.
Сети с меньшей пропускной способностью, такие как <strong>Ethernet</strong>, соединяют эти серверы с офисными или домашними рабочими станциями или ПК, называемыми в терминологии <strong>Plan 9</strong> терминалами.</p>
<p>Современный стиль вычислений предполагает наличие для каждого пользователя выделенной рабочей станции или ПК.
<strong>Plan 9</strong> использует принципиально другой подход.
Хотя она может функционировать и на рабочей станции с файлами, хранящимися на локальном диске, такая конфигурация не является канонической.
Вместо этого машины с мониторами, клавиатурами и мышами получают доступ к большинству вычислительных ресурсов и систем хранения по сети, становясь терминалами системы, подобно терминалам старой системы с разделением времени.
При использовании <strong>Plan 9</strong> терминал временно персонализируется этим пользователем.</p>
<p>Принцип построения аппаратуры под пользователя здесь не работает.
<strong>Plan 9</strong> предлагает возможность программными средствами изменить то, как она пользователем воспринимается.
Эта подстройка сопровождается приданием публично видимым ресурсам в сети локальных персональных имен.
<strong>Plan 9</strong> обеспечивает механизм организации персонального представления общего пространства с локальными именами глобально доступных ресурсов.
Так как наиболее важными ресурсами сети являются файлы, модель этого представления ориентирована на файлы.</p>
<p>Локальные пространства имен предоставляют способ реализации представления сети &ldquo;под себя&rdquo;.
Все службы, доступные в сети, экспортируют иерархии файлов.
Те из них, которые важны для пользователя, собираются вместе в личное пространство имен.
Не представляющие в данное время интереса игнорируются <strong>[этот подход тяжело осознать, но он это одна из важнейших концепций, реализованных в системе]</strong>.
Этот стиль использования отличается от однородного глобального пространства имен в <strong>UNIX</strong>.
В <strong>Plan 9</strong> имеются известные имена для служб и унифицированные имена для файлов, экспортированных этими службами, однако их представление полностью локально.
Примером может служить разница между словосочетанием &ldquo;мой дом&rdquo; и четко сформулированным точным адресом.
Последний может быть использован каждым, тогда как первое используется только в разговорной речи: смысл фразы меняется в зависимости от того, кто и когда ее произносит, однако она считается понятной.
Подобным образом в <strong>Plan 9</strong> имя <code>/dev/mouse</code> всегда относится к мыши, а <code>/bin/date</code> - это команда вывода даты, но то, какие файлы эти имена представляют, зависит от обстоятельств, например, от архитектуры машины, исполняющей команду <code>date</code>.
<strong>Plan 9</strong>, таким образом, имеет локальные пространства имен, которые подчиняются глобальным соглашениям.
Именно эти соглашения гарантируют разумное поведение при наличии локальных имен.</p>
<h2 id="наши-дни">Наши дни</h2>
<p><strong>Plan 9</strong> несла в себе несколько инноваций, оказавших влияние на многие последующие системы.
Но до недавнего времени исходный код находился под коммерческой лицензией, связывавшей разработчиков и пользователей.
<strong>Bell Labs</strong> и небольшое сообщество программистов продолжали улучшать и развивать <strong>Plan 9</strong>.</p>
<p>Лицензия смягчалась из года в год, и в 2003 году <strong>Plan 9</strong> был наконец-то выпущен под первой свободной лицензией.
Коммерческая ветвь, известная как <strong>Inferno</strong>, теперь также доступна под бесплатной лицензией.</p>
<h3 id="9front">9front</h3>
<p>Это форк <strong>Plan 9</strong>, над которым с 2011 года трудится коллектив разработчиков из сообщества <strong>NineTimes</strong>.
В нём состоят поклонники оригинальной ОС от <strong>Bell Labs</strong>.
Одной из главных проблем оригинальной <strong>Plan 9</strong>, тормозившей развитие системы, было отсутствие драйверов и слабая поддержка периферийного оборудования.
Это было обусловленно однородностью оборудования в лаборатории.
Именно эту проблему постарались решить разработчики <strong>9front</strong>.
Они написали для ОС драйверы <strong>USB</strong>, <strong>Wi-Fi</strong>, аудиокарт, игровые эмуляторы <strong>[можно запустить DOOM]</strong>.
Форк распространялся под той же открытой лицензией <strong>Lucent Public License</strong>, что и <strong>Plan 9</strong>.
На данный момент распространение ведётся под лицензией <strong>MIT</strong>.</p>
<p>Создатели <strong>9front</strong> разместили в сети репозиторий пакетов, значительно облегчающий установку компонентов системы.
В форке был полностью переписан загрузчик.
Он называется <strong>9boot</strong> и отличается использованием <strong>rc</strong>-скриптов, которые позволяют получить доступ к <strong>shell</strong> на любом этапе загрузки <strong>[что может пригодиться, если что-то пошло не так]</strong>.</p>
<p><strong>Plan 9</strong> поддерживала несколько файловых систем: во-первых, нативную <strong>Fossil</strong>, разработанную в <strong>Bell Labs</strong> именно для этой платформы, а также <strong>Kfs</strong>, <strong>Paq</strong>, <strong>cwfs</strong> и <strong>FAT</strong> <strong>[куда без неё]</strong>.
В <strong>9front</strong> основной ФС является <strong>cwfs (cwfs64x)</strong> - это тоже файловая система из <strong>Plan 9</strong>, которая поддерживает шифрование дисковых разделов, а также позволяет безопасно хранить резервные копии компонентов ОС и пользовательских данных.</p>
<p>В <strong>9front</strong> добавлен компилятор языка программирования <strong>Go</strong>.
Также в комплект поставки был добавлен простой текстовый редактор <strong>hold</strong>.
Для обновления ОС используется распределённая система контроля версий <strong>Git</strong>.
С целью более гибкой поддержки оборудования была внедрена подсистема инициируемых сообщениями прерываний <strong>MSI (message signalled interrupts)</strong>.</p>
<p>Система регулярно обновляется, последняя актуальная версия вышла 28 апреля 2024 года<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.
Попробовать <strong>9front</strong> можно на виртуальной машине, либо установив на ПК или одноплатный компьютер.</p>
<h3 id="система-работает">Система работает</h3>
<p>Да, для повседневного использования она, конечно, мало пригодна.
Как и <strong>Plan 9</strong>, <strong>9front</strong> - это всё ещё экспериментальная, исследовательская ОС.
Основная цель создания была воплотить в жизнь некоторые первоначальные задумки <strong>UNIX</strong> и реализовать их на более совершенной и современной аппаратной платформе.
Это в целом удалось.
В исследовательских лабораториях <strong>Plan 9</strong> довольно эффективно использовался в качестве платформы для распределённых вычислений.
Как минимум, <strong>Plan 9</strong> и <strong>9front</strong> доказали, что базовая концепция <strong>UNIX</strong> - каждый системный интерфейс может быть представлен в виде набора файлов - вполне успешно реализуется и в современной ОС.</p>
<p>Как и другие форки <strong>Plan 9</strong>, среди которых следует отметить <strong>9atom</strong>, <strong>Harvey OS</strong> и <strong>Jehanne OS</strong>, <strong>9front</strong> - это ОС для программистов и инженеров.
Для тех, кому больше по душе копаться в конфигах и писать собственный код, чем запускать чужой.
<strong>9front</strong> можно назвать наиболее активным ответвлением от &ldquo;классической&rdquo; <strong>Plan 9</strong>.
Создатели форка непрерывно работают над улучшением аппаратной поддержки и разработкой новых драйверов.
Имеют их усилия и практическое применение: например, на принципах, схожих с архитектурой <strong>Plan 9</strong>, работает протокол <strong>ATA over Ethernet</strong>, созданный для кластеров <strong>NAS</strong>.</p>
<p>С появлением и развитием интернета вещей и одноплатных компьютеров, имеющих ограниченную производительность, востребованность распределённых ОС, которые позволяют гибко перераспределять вычислительные ресурсы в сети и обеспечивать их балансировку, наверняка будет расти.</p>
<p>А значит, у этого проекта есть будущее.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://powerman.name/Inferno/man/4/registry.html">https://powerman.name/Inferno/man/4/registry.html</a> Inferno Registry&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://github.com/doytsujin/registry">https://github.com/doytsujin/registry</a> Plan 9 Inferno-like registry server&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>. T.J. Killian, Processes as Files, USENlX, Summer 1984 Conf. Proc., June 1984, Salt Lake City, UT.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>. Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil Winterbottom, The Use of Name Spaces in Plan 9, Ор. Sys. Rev., Vol. 27, No. 2, April 1993, рр. 72-76.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>. John Ousterhout, Andrew Cherenson, Fred Douglis, Mike Nelson, and Brent Welch, The Sprite Network Operating Systems Operating System, IEEE Computer, 21(2), 23-38, Feb. 1988.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="http://9front.org/releases/2024/04/28/0/">http://9front.org/releases/2024/04/28/0/</a> 9FRONT “DO NOT INSTALL” RELEASED&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></itunes:summary>
			<category domain="https://polyserv.xyz/posts/">posts</category>
			<guid>https://polyserv.xyz/posts/2024-10-31-plan-9-history/</guid>
			<pubDate>2024-10-31T22:00:00Z</pubDate>
		</item>
		<item>
			<title>О Plan 9</title>
			<link>https://polyserv.xyz/posts/2024-10-28-about-plan-9/</link>
			<description>Замолвите слово</description>
			<itunes:summary type="html"><![CDATA[<h2 id="введение">Введение</h2>
<p>Без сомнения, <strong>Plan 9</strong> одна из самых интересных ОС, которую я встречал на своём пути.
Подходы, которые были использованы при её проектировании, просты и универсальны.
Такой же получилась и сама ОС.
<strong>UNIX</strong>&lsquo;овое &ldquo;<strong>всё есть файл</strong>&rdquo; в ней возведено в абсолют.</p>
<p>Не удивительно, ведь её проектировали те же инженеры, что и оригинальную <strong>UNIX</strong> - Кен Томпсон, Деннис Ритчи, Роб Пайк, и др.
Также в ней получили развитие такие подходы, как &ldquo;текст как интерфейс&rdquo; и &ldquo;гомогенная операционная среда&rdquo; - идеи Никлауса Вирта и его среды <strong>Oberon</strong><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.
<strong>[просто сравните скриншоты, для остального нужно лезть в код]</strong></p>
<p><strong>ВСЯ</strong> архитектура ОС построена на взаимодействии с файлами:</p>
<ul>
<li>Хотите создать файл? Создаёте файл.</li>
<li>Хотите создать TCP сокет? &hellip; Cоздаёте файл!
<strong>[привет прикрученным сбоку поперёк сокетам Беркли<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> с их специальными системными вызовами]</strong></li>
<li>Хотите поднять VPN? Ну пока не будем об этом&hellip;</li>
</ul>
<p>Любое устройство в машине представляется нам как иерархическая файловая система.
Да, это накладывает некоторые ограничения на разработчиков драйверов.
Ведь им приходится эту самую файловую систему проектировать.
Но достигаемая при этом унифицированность всей системы экономит нам целую уйму времени при эксплуатации.</p>
<p>Сетевая прозрачность, которая была заложена в протокол <strong>9P</strong><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> с самых первых этапов проектирования, стирает границы между машинами.
Стало быть, не имеет значения где файл/устройство находится - локально или удалённо - взаимодействие будет идти по одному и тому же протоколу.
Доступ к почте? К файловому хранилищу? Чату? Данным GPS? Всё возможно реализовать по одному протоколу.</p>
<p>Ну просто какая-то инженерная утопия.</p>
<h2 id="проблемы">Проблемы</h2>
<p>Но если <strong>Plan 9</strong> так прекрасен, то почему все до сих пор не него не перешли?
Как я считаю, на это повлияло несколько факторов.</p>
<h3 id="статус">Статус</h3>
<p><strong>Plan 9</strong> задумывалась экспериментальной ОС с закрытым исходным кодом и не избавилась от этого ореола до сих пор.
На ней обкатывали новейшие концепций, которые получили своё развитие в ОС <strong>Inferno</strong><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.
Изначально в ней не было почти никаких пользовательских программ.
Только самое необходимое для работы.
И, как следствие, &hellip;</p>
<h3 id="упущенное-время">Упущенное время</h3>
<p>Исходный код <strong>Plan 9</strong> был открыт под лицензией <strong>GPL-2.0-only</strong> (а затем и под <strong>MIT</strong>) лишь в 2014 году.
Внимание сообщества было упущено.
Уже во всю рос и ширился <strong>GNU/Linux</strong>, который <strong>&ldquo;достаточно хорош&rdquo;</strong><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>.
Подумайте о всех тех усилиях сообщества, которые были потрачены на развитие <strong>GNU/Linux</strong>.
Быть может, с таким же вниманием к <strong>Plan 9</strong> мы бы жили в совершенно другом мире.
Но &hellip;</p>
<h3 id="архитектура">Архитектура</h3>
<p>Особенности <strong>Plan 9</strong> блокируют простую миграцию на неё ПО, написанного под <strong>UNIX</strong>.
Получается, что огромный пласт программ, к которым все привыкли, гвоздями прибит к системным вызовам <strong>GNU/Linux</strong> и <strong>BSD</strong>.
Сидеть и писать весь инструментарий с нуля с таким же рвением согласен очень ограниченный круг людей<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.</p>
<p>Кроме того, что это трудоёмкий процесс, он также замедляется сохранением идейной чистоты ОС.
<strong>&ldquo;Лучшая строчка кода та, которая не была написана&rdquo;</strong>.
Мне эта идея близка, но не настолько же буквально.
Возможность создания практически любого софта в виде скриптов оболочки интересная, но не всё ПО можно так реализовать.</p>
<h3 id="графика">Графика</h3>
<p>(это уже лично от меня)</p>
<p>Из <strong>Plan 9</strong> убрали именно то, почему я ушёл с <strong>Windows</strong> на семейство <strong>UNIX</strong> - удобную печатную машинку.
Стандартная оболочка <strong>Rio</strong> и редактор/интерфейс <strong>Acme</strong> требуют от вас 3-х кнопочную мышь.
Работать используя только клавиатуру если и получится, то будет очень дискомфортно и потребует от вас вносить изменения в код базовых утилит.</p>
<p>И знаете, я попробовал работать в этой парадигме.
Но чем дольше я так работал, тем больше понимал, что это хоть и интересный подход <strong>[добавить свою команду в Acme можно просто написав её в панели!]</strong>, но он отнюдь не позволяет мне работать также быстро, как с ориентированным на клавиатуру интерфейсом.</p>
<p>Стандартные CUA<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>? Забудьте.</p>
<p>Подсветка синтаксиса? Забудьте.
<strong>[&ldquo;Не пишите настолько сложный код, которому нужна подсветка синтаксиса&rdquo;. Ну просто супер идея. Как же я сам не догадался то.]</strong></p>
<h2 id="что-делать">Что делать?</h2>
<p>Я уже некоторое время вынашиваю план по возврату в <strong>Plan 9</strong> печатной машинки в виде небольшого набора программ:</p>
<ul>
<li>тайлинговый оконник (на стадии экспериментов с вводом/выводом);</li>
<li>простой эмулятор терминала (ещё не приступал);</li>
<li>emacs-подобный текстовый редактор (на стадии первых набросков).</li>
</ul>
<p>Но вот дилемма.</p>
<p>Оставить <strong>Plan 9</strong> идеологически чистым произведением искусства и не дать ей раскрыться в полной мере?</p>
<p><strong>ИЛИ</strong></p>
<p>Залезть своими грязными ручонками с ПО, рушащим <strong>[возможно]</strong> философию всей ОС?</p>
<p>Как вы могли заметить, я склоняюсь ко второму варианту.
Возможно многим не понравится то, что я собираюсь сделать.
Даже при должном планировании и аккуратной работе я боюсь в своих решениях усложнить то, что не следовало бы.
С другой стороны силой их использовать этот софт никто не заставляет.
А вот от советов и коммитов я не откажусь.</p>
<p>Но, быть может, я не так одинок, как полагаю?
Может людей, которые не смогли &ldquo;пересесть&rdquo; с <strong>UNIX</strong> на <strong>Plan 9</strong> по схожим со мной причинам больше?
И что будет, если все они получат хоть и не идентичный, но похожий на привычный инструмент поверх прекрасной архитектуры, с которым можно работать, забыв о границах машины?
Я не буду бросаться такими формулировками, как &ldquo;революция&rdquo; или &ldquo;небывалый прогресс&rdquo;, но это однозначно будет интересное развитие событий.</p>
<h2 id="планы">Планы</h2>
<p>Этой статьёй я хочу дать старт циклу публикаций, лирических и технических, посвящённых <strong>9front</strong><sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup> <strong>[форк Plan 9]</strong>.</p>
<p>Часть статей будут набросками к моей учебной работе по ОС <strong>[&ldquo;будут&rdquo; не значит часто!]</strong>.
Технические же статьи (установка, настройка) будут полезны людям, которые только начинают своё знакомство с <strong>Plan 9</strong>.
Как оказалось, их не так уж много даже на английском, не говоря уже про русский.
Так новички и интересующиеся получат более быстрый старт, чем был у меня.</p>
<h2 id="ps">PS</h2>
<p>Даже если вы прочитали эту статью через год, два, пять, десять лет и думали в своё время о том же - напишите мне в одном из моих ресурсов <strong>[лучше на почту или в nostr]</strong>.
Очень интересно будет узнать ваше мнение на этот счёт.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://en.wikipedia.org/wiki/Oberon_(operating_system)">https://en.wikipedia.org/wiki/Oberon_(operating_system)</a> Оберон&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://en.wikipedia.org/wiki/Berkeley_sockets">https://en.wikipedia.org/wiki/Berkeley_sockets</a> Сокеты Беркли&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="http://9p.cat-v.org/">http://9p.cat-v.org/</a> 9P&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="http://doc.cat-v.org/inferno/4th_edition/">http://doc.cat-v.org/inferno/4th_edition/</a> Inferno&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://news.ycombinator.com/item?id=1732404">https://news.ycombinator.com/item?id=1732404</a> &ldquo;Plan 9 failed simply because it fell short of being a compelling enough improvement on Unix to displace its ancestor. Compared to Plan 9, Unix creaks and clanks and has obvious rust spots, but it gets the job done well enough to hold its position. There is a lesson here for ambitious system architects: the most dangerous enemy of a better solution is an existing codebase that is just good enough.&rdquo; Eric S. Raymond&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="http://9p.io/plan9/">http://9p.io/plan9/</a> Plan 9 Foundation&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p><a href="https://ru.wikipedia.org/wiki/IBM_Common_User_Access">https://ru.wikipedia.org/wiki/IBM_Common_User_Access</a> CUA&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p><a href="http://9front.org/">http://9front.org/</a> 9front&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></itunes:summary>
			<category domain="https://polyserv.xyz/posts/">posts</category>
			<guid>https://polyserv.xyz/posts/2024-10-28-about-plan-9/</guid>
			<pubDate>2024-10-28T19:00:00Z</pubDate>
		</item>
		<item>
			<title>Новый проект</title>
			<link>https://polyserv.xyz/posts/2024-06-05-new-project/</link>
			<description>Немного LISP&amp;rsquo;а для Hare?</description>
			<itunes:summary type="html"><![CDATA[<p>Итак, о новом проекте.</p>
<p>Звать его <strong>мышка</strong><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. Ибо он маленький!</p>
<p>Я подумал, чего же мне не хватает как программисту? Правильно, своего диалекта <strong>Scheme</strong>. Конечно дело не в том, что я хочу просто написать интерпретатор. Дело в том, что новый прекрасный язык программирования <strong>Hare</strong><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> живёт без возможности расширить логику приложения каким-либо скриптовым языком. Так больше продолжаться не может! <strong>&ldquo;Доколе!&rdquo;</strong> подумал я и сел за работу.</p>
<p>На самом деле я ожидал, что многое будет мне непонятно. Но имея некоторый опыть написания плагинов для <strong>Emacs</strong> и небольшой опыт в самом <strong>Hare</strong>, я имел представление с какой стороны подойти. Также я нашёл просто прекрасную статью<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, в которой очень базово, но понятно объясняется что и как нужно делать. Я немного переработал лексер из самого <strong>Hare</strong>, написал небольшой <strong>READ</strong>, подкрутил <strong>EVAL</strong>. И не успел я моргнуть, как мой интерпретатор начал принимать тестовый код вычисления чисел <strong>Фибоначчи</strong> на интерпритацию!</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#66d9ef">define </span>(<span style="color:#a6e22e">fib</span> n)
</span></span><span style="display:flex;"><span>        (<span style="color:#66d9ef">if </span>(= n <span style="color:#ae81ff">2</span>) <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>          (<span style="color:#66d9ef">if </span>(= n <span style="color:#ae81ff">1</span>) <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>            (+ (<span style="color:#a6e22e">fib</span> (- n <span style="color:#ae81ff">1</span>)) (<span style="color:#a6e22e">fib</span> (- n <span style="color:#ae81ff">2</span>))))))
</span></span></code></pre></div><p>После этого запилил сам <strong>REPL</strong> и вот им уже можно пользоваться!</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>$ ./mice
</span></span><span style="display:flex;"><span>mice-repl v0.0.0
</span></span><span style="display:flex;"><span>λ =&gt; (define x 12)
</span></span><span style="display:flex;"><span>12
</span></span><span style="display:flex;"><span>λ =&gt; (+ x 25)
</span></span><span style="display:flex;"><span>37
</span></span><span style="display:flex;"><span>λ =&gt; (define y (+ x 25))
</span></span><span style="display:flex;"><span>37
</span></span><span style="display:flex;"><span>λ =&gt; (exit)
</span></span><span style="display:flex;"><span>Bye!
</span></span></code></pre></div><p>Конечно, ещё много работы впереди, но я смогу с этим справиться. Изначально я думал, что буду добавлять по одному примитиву в неделю. Но реализовывать <strong>Scheme</strong> на <strong>Hare</strong> оказалось так легко, что за короткое время я смог добавить почти все самые базовые примитивы. Думаю некоторые сложности у меня будут со сборщиком мусора. Что-то мне подсказывает, что до меня на <strong>Hare</strong> этого никто не делал. Остаётся только читать документацию и примеры кода на старом добром <strong>C</strong>. Благо возможности у <strong>Hare</strong> и <strong>C</strong> сопоставимые.</p>
<p>Неожиданным бонусом я получил очередной кусочек собираемого мной пазла &ldquo;понимание технологий&rdquo;. Теперь я могу с уверенностью сказать, что не просто понимаю как именно машины обрабатывают команды и выполняют описанные в них операции, но и реализовал такую машину, хоть на очень базовом уровне и не в железе. Но кто знает, возможно и до стэковой машини на <strong>ПЛИС</strong> доберусь когда-нибудь.</p>
<p>А пока пожелайте мне удачи, т.к. на этот интерпретатор у меня ну уж очень большие планы.</p>
<p>Продолжение следует&hellip;</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://codeberg.org/nikita-popov/mice">https://codeberg.org/nikita-popov/mice</a> mice&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="http://harelang.org/">http://harelang.org/</a> Harelang&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://kflu.github.io/2018/04/15/2018-04-15-implement-scheme/">https://kflu.github.io/2018/04/15/2018-04-15-implement-scheme/</a> Implement Scheme&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></itunes:summary>
			<category domain="https://polyserv.xyz/posts/">posts</category>
			<guid>https://polyserv.xyz/posts/2024-06-05-new-project/</guid>
			<pubDate>2024-06-05T19:00:00Z</pubDate>
		</item>
		<item>
			<title>Время вести блог!</title>
			<link>https://polyserv.xyz/posts/2024-06-04-time-to-blog/</link>
			<description>Блог в 2К24? Да.</description>
			<itunes:summary type="html"><![CDATA[<p>Что ж, судя по всему сейчас прекрасное время, чтобы начать свой блог.</p>
<p><strong>сарказм</strong></p>
<p>Действительно, я думаю это будет отличной входной точкой для моих ресурсов. Долгое время тут была простая заглушка, которую я использовал для локальных ресурсов. Но вот я начал один из проектов и задумался, а как компактно сообщать людям свои контакты? И вот - моя собственная страничка в <strong>Интернет</strong>. Так что любой человек с браузером и без какого-либо аккаунта сможет зайти и почитать, если ему интересно. Ну и мой внутренний графоман наконец найдёт выход своим буквам.</p>
<p>Я использую простой <strong>SSG</strong> <strong>Hugo</strong><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. Так что блог - набор сгенерированых страничек без какого-либо движка под капотом. Это и просто, и безопасно. Думаю зависимость от технологий, даже свободных - это зависимость. Так что следовать <strong>KISS</strong><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> во всём - хороший план как по мне. Должна быть возможость разобраться в технологии за преемлемый срок и не переусложнять <strong>никогда</strong>. Инструмент не должен быть сложнее работы, для которой он предназначен. Этот принцип проповедуют многие: <strong>suckless.org</strong><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, <strong>Дрю ДеВолт</strong><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, <strong>UNIX</strong>/<strong>Plan 9</strong><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup><sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>, и т.д. Не буду с ними спорить, т.к. в основном с ними согласен.</p>
<p>Также я хочу попробовать на себе те старые добрые времена, когда люди просто держали свои странички в <strong>Интернет</strong> для себя и друзей. До того, как корпорации переманили всех на подконтрольные им платформы. Всё, что я здесь пишу, находится только под мои контролем. Захочу - изменю, захочу - удалю. Да, кто-то может сделать копию, но это будет только копия. Конечно это не значит что я каждый день буду менять всё, что здесь написано. Но возможность этого греет душу.</p>
<p>Я, конечно, пока оставлю остальные ресурсы для перекрёстной публикации. Со временем возможно от них избавлюсь. А может им на смену придут новые популярные ресурсы и инструменты. Как минимум этот ресурс будет доступен также и через <strong>Gemini</strong><sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup> (серьёзно, это очень интересный протокол).</p>
<p>А пока:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>make publish
</span></span></code></pre></div><div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://gohugo.io/">https://gohugo.io/</a> Hugo SSG&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://en.wikipedia.org/wiki/KISS_principle">https://en.wikipedia.org/wiki/KISS_principle</a> Keep It Simple, Stupud&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="http://suckless.org/">http://suckless.org/</a> SuckLess&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://drewdevault.com/">https://drewdevault.com/</a> Drew DeVault&rsquo;s Blog&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://en.wikipedia.org/wiki/Unix_philosophy">https://en.wikipedia.org/wiki/Unix_philosophy</a> UNIX Way&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="http://9front.org/">http://9front.org/</a> 9front&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p><a href="https://geminiprotocol.net/">https://geminiprotocol.net/</a> Gemini Protocol&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></itunes:summary>
			<category domain="https://polyserv.xyz/posts/">posts</category>
			<guid>https://polyserv.xyz/posts/2024-06-04-time-to-blog/</guid>
			<pubDate>2024-06-04T19:00:00Z</pubDate>
		</item>
	</channel>
</rss>
