Первая социальная сеть появилась не в 2000-х и не в 90-х — а в 1971 году.

Без аккаунтов, без алгоритма, без центрального сервера. Весь профиль пользователя укладывается в один обычный текстовый файл, который тот полностью контролирует. Джон Кармак (сооснователь id Software, программист Doom и Quake) вёл в нём дневник разработки. И, скорее всего, клиент для этого протокола уже установлен в операционной системе, о которой вы даже не задумывались.

Но самое удивительное — спустя полвека протокол всё ещё работает. И не исключено его возвращение.

Называется он Finger, и попробовать его можно прямо сейчас.

Клиент finger идёт предустановленным в macOS и большинстве Unix-систем. На Debian или Ubuntu он ставится командой apt install finger. Windows тоже поставляется со своим finger.exe. А в Emacs есть M-x finger, входящий в net-utils.el из коробки.

finger random@happynetbox.com

Команда случайным образом покажет один из аккаунтов Finger, хостящихся на happynetbox.com — одном из многих каталогов (или хостов), упрощающих публикацию для тех, у кого нет собственного сервера. Забавно, не правда ли?

Но происхождение протокола не менее интересно.

Происхождение

В 1971 году в Стэнфордской лаборатории искусственного интеллекта (SAIL) исследователи делили один компьютер, работавший под управлением системы разделения времени WAITS. Единственным способом узнать, кто подключён, была команда WHO, выдающая бесконечный и труднопонятный список.

Лес Эрнест, один из инженеров лаборатории, ежедневно наблюдал одну и ту же картину.

Я часто видел, как люди водят пальцем по списку WHO, говоря что-то вроде: "Вот Дон, а это Пэтти, но я не знаю, когда в последний раз был замечен Том".

Люди водили пальцем по экрану — отсюда и название (finger — «палец»). Эрнест написал программу, которая выводила эту информацию в человекочитаемом виде: реальные имена, местоположение и, что важнее всего, сколько времени терминал простаивал без активности. Он был практичным инженером, предпочитавшим личное общение переписке через компьютер. Ему просто нужно было понимать, стоит ли встать и пройти по коридору, чтобы найти человека.

Побочным эффектом этого решения стало изобретение сетевого присутствия — по сути, социальной сети.

В 1977 году протокол был формализован в RFC 742, написанном Кеном Харренстином. Он был настолько простым, что поддерживался лишь тремя площадками: SAIL, SRI и машинами ITS в MIT. Немного позже сетевой реализацией занялись Эрл Килиан в MIT и Брайан Харви в Стэнфорде.

В 1991 году появился RFC 1288 — окончательная спецификация, сделавшая более ранние версии устаревшими.

Первый микроблог: файлы .plan и .project

Помимо самого протокола, важен был контент. Кроме информации о подключении, Finger показывал содержимое двух текстовых файлов в домашней папке пользователя: .plan и .project. Изначальная идея была в том, чтобы объявлять, над чем человек работает и что планирует делать. Своего рода статичный профессиональный «статус», без лайков и комментариев — как changelog повседневной жизни или проекта.

Люди сделали то, что делают всегда: превратили технологию во что-то человеческое. Начали публиковать стихи, шутки, личные дневники, ASCII-арт, статьи — что угодно! Любой человек в мире мог прочитать чей-то .plan простой командой finger user@host. Многие справедливо считают это первым микроблогом в интернете.

Самый известный пример — .plan Джона Кармака. Годами любой фанат мог набрать finger johnc@idsoftware.com (сейчас адрес не работает) и узнать прямо из первых рук, чем занимается графический движок его любимых игр. Записи он вёл с 1996 по 2010 год. Сегодня они сохранены и заархивированы на GitHub. Это один из самых ценных технических документов в истории видеоигр — и распространялся он по протоколу 1971 года.

Не стоит ожидать прозы, от которой наворачиваются слёзы. Стиль был телеграфным: списки задач и багов без единого лишнего слова. Но время от времени случались настоящие бомбы. Например, 18 августа 1997 года Кармак объявил через свой .plan, а не через сайт или пресс-конференцию, что планирует открыть исходный код Doom:

-----------------------------------------
John Carmack's .plan for Aug 18, 1997
-----------------------------------------

I get asked about the DOOM source code every once in a while, so here is a
full status update:

[...]

The DOOM code should be a lot more interesting. It is better written, 32 bit,
and portable. There are several interesting projects that immediately present
themselves for working with the code. GLDOOM and a packet server based
internet DOOM spring to mind.

Первое IoT-устройство говорило на Finger

Около 1982 года несколько студентов из Университета Карнеги — Меллона (Майк Казар, Дэвид Николс, Джон Зарнай и Айвор Дарэм) устали ходить к автомату с кока-колой на кафедре и обнаруживать его пустым или с тёплыми бутылками. Они установили микропереключатели, отслеживавшие, сколько бутылок в каждой колонке и как долго они охлаждаются.

Всё это подключили к сети и выставили статус через Finger. С любого компьютера можно было выполнить finger coke@cmu.edu (точное имя машины менялось с годами) и узнать не только, есть ли напитки, но и какая кнопка выдаст самую холодную бутылку. Это считается одним из первых подключённых устройств в истории — дедушкой Интернета вещей. И его интерфейсом снова оказался Finger.

Протокол

Finger настолько прост, что его можно описать одним абзацем. Клиент открывает TCP-соединение на порт 79 сервера. Отправляет строку текста (искомое имя пользователя или пустую строку для получения списка всех) с завершающими символами возврата каретки и перевода строки. Сервер отвечает обычным текстом и закрывает соединение. Всё!

Никакого шифрования, заголовков, сессий. Чистая простота.

sequenceDiagram
    participant C as Client (finger)
    participant S as Server (fingerd, port 79)
    C->>S: Opens TCP connection to port 79
    C->>S: "johnc" + CRLF
    S->>C: Contents of ~johnc/.plan (plain text)
    S->>C: Closes the connection

Базовая команда выглядит так:

finger user@server

Поскольку у протокола нет секретов, с ним можно «поговорить» вручную через netcat. Имя пользователя отправляется на порт 79 через стандартный ввод, и читается ответ:

echo "random" | nc happynetbox.com 79

Всё это покажется знакомым, потому что работает так же, как другие протоколы — Whois, Gopher или SMTP: подключение, текстовый запрос, чтение ответа.

Что находится внутри .plan

Файл .plan — это не лента постов. Это единый текстовый файл, в который можно писать что угодно. Когда кто-то запрашивает пользователя через finger, сервер отдаёт весь файл целиком, как есть. Никакого формата не требуется — полная свобода.

Значит ли это, что можно опубликовать только одну запись? Нет. Со времён 80-х принято вести внутри одного файла что-то похожее на дневник, добавляя записи с датами, обычно самой новой сверху. Именно так Кармак публиковал годы разработки. Его .plan представлял собой растущий файл с записями, разделёнными пунктирными линиями:

-----------------------------------------
John Carmack's .plan for Jan 02, 1998
-----------------------------------------

Wired magazine does something that almost no other print magazine...

Свой файл может выглядеть проще — с заголовком-профилем и несколькими записями:

Emily Carter
Marine biologist. Coffee, kayaking and old maps.

--- 2026-08-14 ---
Back from sampling on the coast. Three jars full of plankton to go through.

--- 2026-08-05 ---
Finally finished "Dune". Now I get half the memes on the internet.

--- 2026-07-30 ---
Anyone know how to fix a bike chain that keeps slipping off? Tips welcome.

Когда файл становится слишком длинным, старые записи удаляются вручную. За ним не стоит база данных, хранящая историю: .plan изменяем и не версионируется — всё удалённое пропадает безвозвратно. Перейти по ссылке с одного профиля на другой невозможно. Всё делается руками.

Для наглядности — сравнение с привычными сервисами:

Mastodon / X / Reddit Finger (.plan)
Публикация Новый пост под каждую идею Редактируется один текстовый файл
Несколько записей Автоматически, каждый пост — строка Вручную: записи с датами в одном файле
История Всё сохраняется, есть постоянная ссылка Только то, что осталось в файле, без ссылок
Подписка на кого-то Кнопка "подписаться" и единая лента Запрос finger вручную либо через агрегирующий клиент
Ответы и треды Да Нет нативно
Лайки и уведомления Да Нет
Структурированный профиль Да Нет
Переход между профилями Ссылки и упоминания Нет
Поиск людей Алгоритм и тренды Слухи и списки сообщества

На фоне современных соцсетей это выглядит скромновато. Современные сервисы сглаживают шероховатости, как будет показано далее. Но здесь не гонка функций — просто файл со своим статусом.

Закат и возрождение

Finger вышел из моды не из-за смены вкусов, а из-за проблем с безопасностью.

2 ноября 1988 года появился червь Морриса — один из первых червей, распространившихся по интернету. Одним из векторов заражения была уязвимость в демоне fingerd. Червь отправлял запрос, переполнявший буфер и позволявший выполнить код на удалённой машине. Это, вероятно, было первым злонамеренным переполнением буфера в истории. Заражению подверглись около 6000 компьютеров — примерно 10% всего интернета того времени!

Помимо этого существовала более глубокая проблема архитектуры. Finger раскрывает информацию о людях: имена, почту, расписание и время последнего входа. В самом RFC 1288 есть предупреждение:

Предупреждение!! Finger раскрывает информацию о пользователях; более того, такая информация может считаться конфиденциальной.

К концу 90-х подавляющее большинство администраторов отключили сервис. Протокол стал реликтом после почти 20 лет использования — не такой уж плохой результат.

А дальше случился неожиданный поворот. Finger настолько забыт и одновременно настолько распространён, что в 2020 году выяснилось: некоторые злоумышленники используют предустановленный в Windows finger.exe для скачивания малвари без лишних подозрений. Это техника под названием living-off-the-land: бинарник уже есть в системе, ему доверяют, и почти никто за ним не следит. Малварь Astaroth использовала его для загрузки payload. Тот факт, что протокол 1970-х годов до сих пор поставляется с каждой копией Windows, многое говорит о его конструкции.

Простые, функциональные идеи очень трудно убить. Достаточно посмотреть, сколько существует команд Unix, многие из которых написаны задолго до рождения нынешних пользователей. А вместе с возрождением "малого интернета" — движения минималистичных, децентрализованных протоколов (Gemini, IRC, RSS, NNTP и других) — Finger снова напомнил о себе:

  • Happy Net Box от Бена Брауна. Реинкарнация .plan с веб-интерфейсом для редактирования текста и демоном, ограничивающим риски безопасности. Команда finger benbrown@happynetbox.com или finger random@happynetbox.com покажет случайного пользователя.
  • Finger.Farm от Джона Роига. Ещё одна реализация Finger с открытым кодом на Node, с обновлениями через веб, REST API или cURL — предназначена для самостоятельного хостинга.
  • plan.cat — публичный сервер, который также связан мостом с ActivityPub, так что .plan можно читать из Mastodon.

Это живой протокол, маленький и легко модифицируемый, который поддерживают энтузиасты, находящие в нём удовольствие.

Существуют даже каталоги активных аккаунтов, например курируемая карта Fingerverse или Finger ring:

finger ring@thebackupbox.net

Наверняка существуют и другие сообщества, о которых пока ничего не известно.

Первые шаги

Просто: хостинг типа Happy Net Box

Никакой настройки не требуется. Регистрация бесплатна на happynetbox.com, текст пишется в веб-форме и сохраняется. С этого момента прочитать его может кто угодно в мире:

finger your-user@happynetbox.com

Сервис предоставляет сервер и безопасность. Это отличный способ получить публичный .plan за минуту, без единой команды в консоли. Бесплатно. Для тех, кто пришёл из Mastodon или X, это аналог "создания аккаунта".

Средний уровень: демон Finger на своём Linux

Если сервер уже есть (VPS, Raspberry Pi), можно запустить классический демон — старый добрый fingerd. Он читает файл ~/.plan запрошенного пользователя и отдаёт его. На Debian лучше использовать ffingerd — переработанную с оглядкой на безопасность реализацию, рекомендуемую для публичного сервиса. Запускается он через супер-сервер типа inetd, который слушает порт 79 и стартует демон при каждом подключении.

sudo apt install openbsd-inetd ffingerd

Добавьте эту строку в /etc/inetd.conf и перезагрузите сервис:

finger stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/ffingerd
sudo systemctl reload openbsd-inetd

Теперь создайте файл плана, доступный на чтение всем, и проверьте:

echo "Hi, I'm Bob. Today I'm working on my Finger server." > ~/.plan
chmod a+r ~/.plan
finger your-user@your-server

Остаётся открыть порт 79 в файрволе и направить на него домен. Поскольку Finger раскрывает информацию, стоит следовать рекомендациям из руководства по безопасности Debian: использовать ffingerd, ограничивать список хостов, которым разрешено подключаться, и лимитировать количество процессов.

Сложно: собственный fingerd на Python

Для полного контроля и понимания протокола изнутри можно написать свой сервер. Поскольку Finger — это просто текст через сокет, реализация укладывается в несколько строк. Вот скрипт для раздачи своего .plan.

Создайте файл fingerd.py с таким содержимым:

import asyncio

PLAN_FILE = "plan.txt"


async def handle(reader, writer):
    # Read the client's query and discard it: we serve a single plan.
    await reader.readline()
    try:
        with open(PLAN_FILE, encoding="utf-8") as file:
            body = file.read()
    except FileNotFoundError:
        body = "No plan yet.\n"
    writer.write(body.encode("utf-8"))
    await writer.drain()
    writer.close()


async def main():
    server = await asyncio.start_server(handle, "0.0.0.0", 79)
    async with server:
        await server.serve_forever()


asyncio.run(main())

Создайте plan.txt с нужным содержимым и запустите скрипт.

Порт 79 привилегированный, поэтому требуются повышенные права:

sudo python3 fingerd.py

Проверка из другого терминала:

finger anyone@localhost

Сервер игнорирует любое переданное имя и просто возвращает план.

Чтобы сервер переживал перезагрузки, стоит обернуть его в сервис systemd.

Дальнейшие улучшения — на усмотрение разработчика.

Заключительные замечания

Сегодня протокол жив и по-прежнему патчится. Современные реализации не раскрывают домашнюю папку целиком, не используют gets() и изолируют процесс. Призрак червя Морриса — это уязвимость конкретной реализации 1988 года, а не проблема архитектуры протокола. Он прост, практичен и безопасен. А ещё делает пользователя полным владельцем своего присутствия в сети.

При этом сегодня существуют более полные, более доступные решения — либо построенные на других протоколах:

Альтернатива Что пишется Как передаётся Как читается
Finger Файл .plan Finger (порт 79) finger user@host
Org Social Записи в social.org HTTP Клиент Org Social или curl + grep
RSS / Atom XML-фид, сгенерированный из Markdown HTTP Любой ридер фидов
Gemlog Страницы .gmi в gemtext Gemini (порт 1965) Клиент Gemini (Lagrange, Elpher)
Phlog Текстовые файлы и gophermap Gopher (порт 70) Клиент Gopher или curl gopher://
Страница /now Текстовая или HTML-страница HTTP Браузер или curl

Для тех, кто пришёл из массовых соцсетей, RSS — самый мягкий вход: контент публикуется в блоге, а подписчики читают через свой ридер. Gemlog протокола Gemini и phlog протокола Gopher — родственники "малого интернета" со своими клиентами и той же тягой к спокойствию. Страница /now (движение, начатое Дереком Сиверсом в 2015 году и каталогизированное на nownownow.com) — это, по сути, .plan, перенесённый в веб: единственная страница, отвечающая на вопрос "чем я занят сейчас?". А Org Social практически повторяет идею Finger с рождения: микроблог в текстовом файле на собственном хостинге.

Именно эта крайняя минималистичность, без правил и заданных форматов, делает протокол таким живучим и по-настоящему приятным в использовании.

Массовым он больше не станет — да и не важно. Он будет жить на окраинах всё более сложного интернета, поддерживаемый теми, кому это интересно, ожидая, что кто-то введёт finger и заново откроет для себя этот "пасхальный" протокол. Возможно, это самая маленькая и самая по-настоящему личная вещь, которая может быть в интернете.

Источники