В октябре 1998 года в мой почтовый ящик в Великих Луках упал конверт из Редмонда, штат Вашингтон. Внутри было письмо из пяти строк: «Although your submission is interesting, we have determined your product does not fit our current business needs.» Это был ответ на мое письмо, в котором я предлагал Microsoft одну идею.

Но обо всём по порядку.

Меня зовут Андрей. Я из небольшого городка Великие Луки в России. Сейчас мне 47 лет. Работаю я программистом-сисадмином в государственном образовательном учреждении. Недавно разбирал старые бумаги и наткнулся на письмо, датированное 1998 годом. Почитал, вспомнил его историю и решил рассказать ее вам. Думаю она заинтересует многих читателей. Во всяком случае, надеюсь на это.

Я расскажу эту историю от начала до конца. Она займёт чуть более 10 минут, но я обещаю — в конце вас ждёт пища для размышлений.

У меня нет копии моего письма, которое я посылал в Microsoft — только ответ. Формально под этот ответ можно подогнать любую историю. Я понимаю, как это выглядит. Я не могу доказать, что мое предложение было именно таким, каким я его сейчас опишу. Но я расскажу всё так, как помню, и покажу, в чём сомневался. А решать вам.

Оглавление

НАЧАЛО

Тогда мне было около 20 лет. Я был студентом местного экономического института. И, как большинство молодежи того времени, увлекался компьютерами. Был у меня и ZX spectrum, и Искра. Году в 95 у меня появился pentium 60!. Это было время экспериментов с разными языками программирования, с разными новыми возможностями. Теми, которые были доступны в то время.

Ну и, конечно же, интернет. Появился он у меня году в 1997-1998. В те времена интернет был медленный и, я бы сказал, пустоватый. Хотя сайты уже появлялись, находить их было ещё то искусство. Как искать? 1998 год! Тогда мне были доступны поисковики lycos, yahoo. Последний был сначала просто каталогом сайтов, который тогдашние веб мастера заполняли сами. В российском сегменте сначала появился rambler (1996), потом Яндекс (1997). В глобальном интернете нынешний гигант Google появился также в 1998 году. И это было дикое время диалапа )

В общем, 1996-1998 годы прошлого века были временем становления интернета как такового и поисковых технологий. По данным Netcraft, в 1995 году в мире насчитывалось всего около 19 тысяч сайтов. К 1998 году их число выросло до 2,4 миллиона. Большинство из них были статическими HTML-страницами, которые обновлялись нечасто - иногда раз в месяц, иногда и реже. Казалось бы, при таком малом количестве сайтов проблемы с поиском быть не должно. И всё же она была.

НЕМНОГО О СЕБЕ

Это не просто деталь — это, возможно, и есть отправная точка всей истории. Я с детства страдаю таким недугом, как ВСД. Кто-то считает это состояние неврозом. И в таком состоянии я частенько задавался, да и сейчас задаюсь, двумя вопросами — Как и Почему.

Спойлер. Во всемирной классификации болезней нет такой, но есть две, которые описывают данное состояние. Это F45.3 — соматоформная дисфункция вегетативной нервной системы. И вторая — G90 — расстройство вегетативной (автономной) нервной системы. Не буду вдаваться в подробности всего букета ощущений при данном недомогании (кому интересно — нагуглит).

Именно эта особенность, полагаю, и сыграла свою роль в истории, о которой я расскажу.

РОЖДЕНИЕ ИДЕИ

Однажды бродя по каталогам сайтов, заходя на Yahoo и Яндекс я задумался — как они ищут сайты для индексации, насколько это затратно и т.д. Начал разбираться, как это устроено. Честно говоря, откуда я узнал про технологию спайдеров (поисковых роботов) — не помню. Возможно, в немногочисленных статьях журналов того времени. А возможно и скорее всего это была просто догадка, предположение, что кто-то или что-то должно как-то обходить сайты, собирать информацию, которую поисковик потом проиндексирует.

Мне эта идея почему-то крайне не понравилась (может, всё то же ВСД подстегнула мышление). Как так — какое-то огромное количество компьютеров в датацентре поисковика ходит по огромному количеству сайтов, тянет с них все страницы! Это ж колоссальные затраты ресурсов и со стороны поисковиков, и со стороны самих сайтов (трафик-то тогда был дорогой). А как же актуализация информации? Тут два варианта. Либо поисковик заходит часто и пожирает трафик, либо заходит редко, и ты миришься с неактуальной информацией в индексе поисковика. Чем больше узнавал, тем сильнее крепло ощущение: должен быть экономный способ!

Мой ум и отчасти моя ВСД бурно реагировали: это не дело! Это выглядело так же нелепо, как если бы почтальон каждый день обходил все дома подряд и спрашивал: «Вам есть что отправить?», вместо того чтобы просто ждать, пока вы сами принесёте письмо на почту.

Тогда я еще не знал, что называется это pull-архитектурой! Я просто чувствовал, что текущая архитектура неоптимальна. Сейчас я понимаю, что моя идея была попыткой перевернуть pull и сделать push. То есть применить уже известную концепцию push к поисковым системам.

Вот так, в одночасье, и родилась идея применить push-архитектуру к веб-поисковой индексации. Тогда я исходил из того соображения, что в те времена большинство сайтов были статическими. Или, скажем там, псевдо-динамическими. Последние просто генерировали статический файл страницы после изменения какой-либо информации в базе данных. Кстати говоря, и сейчас так поступают многие мои знакомые, которые имеют в управлении отраслевые порталы. Большая часть сайта — чистая статика, которая перегенерируется после изменений в базе данных. Либо другой вариант - по расписанию. Чисто динамические сайты я тогда не рассматривал. Но, полагаю, и для них можно было найти адекватное техническое решение.

ТЕХНИЧЕСКАЯ ЧАСТЬ

Несколько слов о том, как я технически тогда видел решение, — не ради занудства. Я действительно пытался нащупать техническую реализацию идеи - копал документацию, интернет, SDK.

Собственно, как должна была работать система и что для этого было надо. По задумке она должна была каким-то образом узнавать об изменениях в файловой системе сайта и реагировать на них. Через некоторое время в голове сложилась такая схема. Вот что, насколько я помню после почти трёх десятилетий, делал прототип:

Ядром был filesystem filter driver, построенный на Windows DDK. Прежде чем остановиться на драйвере, я экспериментировал с FindFirstChangeNotification и ReadDirectoryChangesW из Win32 API, но отмёл их — они либо не давали деталей, либо требовали видимого пользовательского интерфейса, что казалось тогда неправильным для серверного решения.

Подход на DDK был другим: kernel-mode filter driver, который сидел ниже I/O manager и перехватывал файловые операции на уровне IRP. Когда файл записывался, драйвер перехватывал запрос IRP_MJ_WRITE на уровне IRP, маппил физический путь файла в URL через конфигурируемую routing table и триггерил user-mode сервис.

Этот сервис делал три вещи последовательно: (1) извлекал видимый текст и якорные ссылки из HTML-файла легковесным парсером; (2) сравнивал извлечённый контент с последним известным состоянием, хранящимся какой то локальной структуре; (3) сжимал только дельту при помощи zlib и упаковывал в небольшой бинарный payload с кастомным заголовком, содержащим URL, last-modified timestamp и content-type.

Payload затем предполагалось пушить через обычный TCP-сокет к listener’у на стороне поисковика. «Новизна» была не в транспортном протоколе, а в инверсии потока управления: вместо того чтобы поисковик спрашивал «что изменилось», хост объявлял «вот что именно изменилось, предобработано и готово к индексации».

Весь pipeline работал на Pentium 60 с Windows NT 4.0 и 8 МБ RAM. Самое сложное было не TCP-коннект — он был простой. Сложно было сделать мониторинг файловой системы достаточно надёжным, чтобы не пропустить rapid successive writes и не задублировать нотификации на temp-файлах, создаваемых редакторами вроде FrontPage.

(Прошло 28 лет, так что я могу ошибаться в мелких деталях, но общая архитектура была именно такой.)

Я выбрал Windows, потому что это была платформа, которую я знал, мог «пощупать», и потому что Microsoft казались мне естественным кандидатом. Про Linux и Apache я тогда не думал — не потому что они были хуже, а потому что я был пацаном из Великих Лук, и мой мир заканчивался там, где заканчивалась документация Microsoft.

Это был осознанный выбор в пользу экосистемы Microsoft. Хотя, полагаю, что при дальнейшем развитии проекта мы бы нашли технические решения и для других платформ.

Тогда для меня такое решение задачи было наиболее логичным. Я не пытался придумать новую архитектуру — я применял известную концепцию к конкретной проблеме — и, конечно, не знал терминов вроде push indexing, incremental indexing или edge computing. Лишь спустя много лет я понял, что именно этими понятиями сегодня описывают многие элементы идеи, которую я тогда пытался реализовать.

Я не считал ту схему единственно возможной. Это была идея с попыткой реализации — первое приближение. Если бы рядом оказались люди с опытом и деньгами, архитектура наверняка стала бы другой, возможно, даже лучше. Но суть — чтобы сайт сам сообщал поисковику об изменениях — осталась бы неизменной.

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

ПИСЬМО В MICROSOFT

Одновременно я начал думать, как же данную технологию реализовать в реальности. Это был 1998 год.

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

И в октябре 1998 года я получил ответ. Обычной наземной почтой.

Конверт из Microsoft, октябрь 1998. Обратный адрес — Редмонд, Вашингтон
Конверт из Microsoft, октябрь 1998. Обратный адрес — Редмонд, Вашингтон

Внутри было короткое письмо. Всего несколько строк по существу:

"Although your submission is interesting, we have determined your product does not fit our current business needs."
"Although your submission is interesting, we have determined your product does not fit our current business needs."

Говоря современным языком, мне прислали вежливый «no thanks».

Итак, Майкрософт отказал. Но я чувствовал, что у идеи есть потенциал. И также понимал, что без крупного партнёра ее не реализовать.

Обычно после такого ВСД может выбить меня на день-два. Пустота, нет энергии, всё через силу. Но в тот раз этого не случилось. Мозг уже решал следующую задачу: „А что если попробовать без Microsoft?“ Вопрос „Как?“ снова взял верх.

Grabit

Что делать дальше? Я начал искать венчурных инвесторов. Для моего кейса термин «венчурный инвестор» слегка громко звучало, но я начал искать сайты, где их можно найти. И, как ни странно для того времени, нашел. Если правильно помню, это был какой-то форум инвесторов. Скорее всего частных. Разместил пост, оставил координаты и забыл про это. Так как не особо верил в результат.

Однако через какое-то время я получил ответ. Это были два частных инвестора. Как сейчас помню, одного звали Дэвид. Мы созвонились. Поговорили и решили попробовать реализовать идею. Компанию решили назвать Grabit!

В процессе переговоров я параллельно улаживал юридические вопросы, организационные. По Western Union я получил первые инвестиции! Целую тысячу долларов на реализацию. Уже не помню, на что я их до цента потратил, но помню, что была куплена лицензия на библиотеку архивации, часть денег была потрачена на наем программиста, который реализовал базовый функционал, и доступ к Win DDK.

Плюс были затраты на местного юриста и поездки в американское посольство для получения визы. В этом месте я, честно сказать, прокололся. Приехав в американское посольство для получения визы, я привез очень много распечаток переписок с партнером. И в одной из них оказалась фраза «если все будет хорошо, то он останется в Штатах». Видно, работникам посольства фраза не понравилась, и визу я не получил.

Я вышел из посольства с отказом в паспорте и чувством, что земля ушла из-под ног. Слегка опустошенный и потерянный, я стоял и не понимал, куда мне теперь идти и что делать. Мимо шли люди — каждый по своим делам, с обычными лицами. Было ощущение, что всё — игра окончена. Не столько обидно, сколько пусто. Я держал в руках папку с распечатками и понимал: Grabit, который мы придумали с Дэвидом, только что умер, даже не успев толком родиться. Из-за одной дурацкой фразы, которую я сам же и привез в посольство. Потом я взял себя в руки и поехал домой.

После этого эта часть истории как-то сама закончилась. Нет визы — нет продолжения.

ЯНДЕКС И ПРОВАЙДЕР

Но я не успокоился. Через какое-то время начал думать, что делать дальше. Лично я все еще чувствовал перспективу технологии. И тогда я написал в Яндекс! Ему тогда было год с копейками отроду. Ну раз не получилось с Майкрософт, то надо писать местным поисковикам! Через некоторое время получил от них ответ. Он был более неожиданным, чем от Майкрософт. Если мне не изменяет память, то звучал он примерно так: с помощью этой технологии можно разве что воровать данные с серверов. Я был слегка шокирован.

Я перечитал письмо дважды. Сначала хотел возмутиться — ну как так-то? Я предлагал им сэкономить кучу трафика, а меня заподозрили в изобретении инструмента для кражи данных. Потом стало смешно. Грустно, но смешно. Видимо, я объяснил идею так, что она показалась им угрозой, а не помощью.

И всё же я не хотел ставить точку в этой переписке. Помня о своих контактах в Штатах, я решил парировать. По юношеской наивности намекнул им, что может рассмотреть возможность какого-то финансирования с моей стороны (в надежде на штатовских партнеров). На что мне ответили — ну если у меня есть пара миллионов долларов, то можно рассмотреть. Это была полушутка. По тону письма было ясно: меня не восприняли всерьез. Получается, Яндекс тех времен стоил пару миллионов долларов? На этом контакты с Яндексом закончились.

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

На мое письмо они тоже ответили. Предложили встретиться. Встреча была в каком-то шахматном клубе в Санкт-Петербурге. И встреча была очень короткой. Представитель провайдера выслушал меня, покивал и сказал что-то вроде: «Идея интересная, мы тоже что-то подобное собираемся делать», хотя по интонации было заметно, что они недопоняли(наверно) , о чем речь вообще. Расстались дружелюбно, без обещаний.

Мы пожали друг другу руки, и я вышел из шахматного клуба на Невский. Было уже темно. Опять я уперся в стену. Чувствовалась большая усталость и пустота внутри. Я помню, как шёл и думал: «Всё. Третья попытка — и снова мимо». Я сделал всё, что мог, в тех условиях, которые у меня были. Идея явно не хотела воплощаться в жизнь — по крайней мере, не через меня и не в 1998 году. Я принял это не сразу, но в тот вечер что-то внутри меня окончательно отпустило ситуацию.

Так закончились мои попытки воплотить идею в жизнь. Grabit не случился.

28 ЛЕТ СПУСТЯ

Прошло больше 28 лет. Я работаю сисадмином, программирую на React и Node.js, живу с той же ВСД — иногда она выбивает меня на день-два, но я привык. И вот, разбирая старые бумаги, я нашел то самое письмо из Microsoft.

И неожиданно для себя понял, что идея, которая тогда казалась мне просто логичным техническим решением, спустя годы получила вполне узнаваемые названия. Сама концепция push была не нова — как я узнал позже, её корни уходят в 1980-е — но её применение к веб-поисковой индексации в тот конкретный момент времени и было тем, что делало предложение специфичным.

Google пришёл к похожей модели с PubSubHubbub ( сейчас WebSub). Microsoft и Яндекс в 2021 году запустили протокол IndexNow. Cloudflare встроил его в свою платформу и автоматически уведомляет поисковики об изменениях. А ведь тогда, в 98-м, всё могло пойти иначе.

Я не знаю, “переизобрёл” ли мир то, что я предлагал. Не знаю, пошло бы развитие поиска по другому пути, если бы в Microsoft ответили иначе. История не терпит сослагательного наклонения. Но когда я смотрю на современные облачные технологии и push-уведомления, я понимаю: идея была верной. Просто она пришла на 15–20 лет раньше, чем мир был готов её принять.

Я не заработал на этом ни цента, не стал знаменитым. Доказательств у меня нет — только память и то самое письмо. Но мне кажется, этого достаточно.

Если вы дочитали до этого места — спасибо. И помните: иногда то, что кажется миру «не вписывающимся в бизнес-интересы», просто ждёт своего часа.

И да, моя ВСД до сих пор со мной. Она по-прежнему заставляет меня задавать вопросы «Как?» и «Почему?» — даже когда тело бунтует. И, может быть, именно эта особенность помогла мне тогда увидеть то, что другие не замечали.

ФИНАЛ

Я буду рад, если эта история найдёт отклик.

Если же среди читателей окажется кто-то, кто увидит в этой истории не просто ретроспективу, а возможность для сотрудничества или нового проекта, — я открыт к предложениям. В конце концов, Grabit так и не родился, но кто знает, что может случиться ещё через 28 лет?

UPD: Сначала я данную статью опубликовал в западном интернете. Реакция я б сказал слабая ) Но отреагировали Scott Hanselman и David Heinemeier, который Ruby on Rails. Отреагировали я б сказал восторженно )