ARMANOS

Возможность

Изолированные профили

Каждый профиль ARMANOS это отдельный браузер: свой каталог данных, свои куки, кэш, расширения, прокси и отпечаток. Страница ведёт один профиль от создания до полного стирания.
153.0.7978.0
Движок
5
Шаблонов отпечатка
от 4 до 32
Открыто разом
2 профиля
Тариф Free

У профиля свой браузер целиком, а не вкладка

Запустите профиль на ARMANOS Browser, и он получит собственный каталог данных: по одной папке на номер профиля внутри fork-profiles. Всё, что Chromium сохраняет, ложится туда: куки, локальное хранилище, IndexedDB, кэш, служебные работники, сохранённые входы и история. Путь уходит движку ключом --user-data-dir прямо при запуске.

Между двумя такими папками ничего не переходит, потому что движок про соседнюю просто не знает. Два профиля на одной машине не читают куки друг друга, и сайт, где вы вошли в одном, о втором не видит ничего.

На встроенном запасном движке изоляцию даёт раздел Electron с именем persist:armanos-profile и номером профиля. Устройство другое, правило то же: один профиль, одно хранилище. Это важно при удалении: чтобы сдержать слово, программа обязана стереть оба вида хранилищ.

Сам список лежит в profiles.json в каталоге программы. Закреплённые профили идут сверху, дальше остальные по времени последнего запуска, чтобы пять рабочих не тонули под девяноста пятью спящими.

  • Свой каталог данных

    fork-profiles с номером профиля, который передаётся движку в командной строке.

  • Свои куки, хранилище и кэш

    Всё, что Chromium сохраняет, вплоть до служебных работников и сохранённых входов.

  • Свои расширения

    Ваши включённые расширения грузятся только в этот профиль, рядом с защитным расширением, которое пишется под профиль при запуске.

  • Свой прокси

    Адрес, доступы и страна выхода принадлежат профилю, а не машине.

  • Свой отпечаток

    Выводится из номера профиля, поэтому на любой вашей машине это одна и та же машина.

  • Свои открытые вкладки

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

Список профилей ARMANOS: папки, прокси и состояние в каждой строке
Список профилей. Каждая строка это полноценный браузер со своим каталогом на диске.

Что вы выбираете при создании

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

Шаблон решает, какой машиной профиль представляется: macos-chrome, windows-chrome, linux-chrome, android-chrome или android-tablet. Папка, метки и заметки нужны вам для порядка. Адрес открытия проверяется при создании, а не только при правке, поэтому негодный адрес отвергается сразу, а не подменяется адресом сценария втихую. Версия ядра принимается только цифрами и точками, потому что она попадает в путь к папке.

Номер профиля можно задать своим: от 8 до 64 знаков из букв, цифр, дефиса и подчёркивания, и только если он свободен. Это не украшение. Номер это семя отпечатка, поэтому перенос профиля на другую машину обязан его сохранить. Перевезите куки без номера, и получится другой компьютер с теми же входами, то есть худшее из возможных сочетаний.

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

Что задаётПо умолчанию
СценарийВнедряемые скрипты, списки слежки, дневные пределы, адрес открытияПриватность
ШаблонКакой машиной представляется отпечатокmacos-chrome
Папка и меткиКак профиль отбирается и находитсяБез папки
Адрес открытияКуда открывается профиль, проверяется как http или httpsАдрес сценария
Версия ядраНа какой установленной сборке движка идёт профильСборка по умолчанию
Без окнаРабота без окна, для серверных сценариевВыключено
ОдноразовыйУбирается вместе с данными, когда окно закрылосьВыключено

Список пишется так, что один сбой его не опустошит

В profiles.json лежат имена, папки, прокси, ядра и данные входа по всему, что у вас есть. Раньше файл перезаписывался поверх себя, и отключение питания посреди записи оставляло обрезок. Память вкладок сделала запись частой, и редкий случай стал обычным. Теперь запись идёт в соседний файл, дожидается попадания данных на диск и только потом переименовывает: переименование внутри одной файловой системы неделимо.

Файл пишется правами только для хозяина. Внутри каталога программы это меняет немного, ведь сам каталог закрыт. Всё меняется, стоит файлу оттуда выйти: в резервную копию, в облачную папку, в разбор проблемы. Права уезжают вместе с копией. Это работает на macOS и Linux; на Windows Node не дотягивается до списков доступа, и в исходнике об этом сказано прямо, вместо обещания защиты, которой нет.

Нечитаемый файл не равен пустому. Испорченный profiles.json читался как «профилей нет», и первая же запись стирала его насовсем. Теперь копия откладывается рядом до того, как кто-то успеет записать поверх, а о беде говорится вслух.

Пароли входа и пароли прокси закрываются связкой ключей системы ещё до диска. Если позже связка их не открывает, закрытый вид сохраняется как есть и записывается обратно нетронутым. Один сбой связки прежде обнулял все пароли разом.

  1. 1

    Пишем соседа

    Новое содержимое ложится во временный файл рядом с настоящим, созданный правами только для хозяина.

  2. 2

    Доводим до диска

    Идёт fsync, и настоящий отказ здесь (кончилось место, отвалился диск, ошибка ввода-вывода) прекращает всю запись, а не считается мелочью.

  3. 3

    Переименовываем поверх

    Переименование неделимо: на диске оказывается либо прежний файл целиком, либо новый целиком.

  4. 4

    Правим права и сбрасываем каталог

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

Неудачная запись не оставляет врущий экран

Если сохранить не вышло, копия в памяти откатывается к тому, что лежит на диске, и вызывающий получает настоящую ошибку. Каталог только для чтения или заполненный диск прежде отвергали создание, правку и запуск, а кнопки висели на «Создаём...» без единого слова.

Запуск: семя доходит до движка раньше первого байта страницы

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

Отпечаток собирается тем же строгим вызовом, каким его показывает стартовая страница: из шаблона, номера профиля, страны выхода прокси и версии движка. Он сворачивается в JSON, кодируется в base64 и уходит ключом --armanos-fingerprint рядом с --user-data-dir. Движок подставляет значения внутри себя, до всякого скрипта страницы, поэтому первый же скрипт видит уже машину профиля.

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

  1. 1

    Предел и место

    Число открытых сверяется с пределом, и место занимается тем же синхронным ходом, без единого await между ними: иначе восемь одновременных запусков увидят один и тот же ноль.

  2. 2

    Проверка прокси и поколения

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

  3. 3

    Замок «занят»

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

  4. 4

    Сессия и выход

    Если настроена общая папка, свежая сессия забирается до того, как движок прочитает свои базы. Если профиль просит новый IP, идёт ротация, и неудачная ротация останавливает запуск.

  5. 5

    Гео, расширения, защита

    Страна выхода задаёт часы и языки, включённые расширения разворачиваются в папки, защитное расширение профиля пишется на диск.

  6. 6

    Запуск движка

    Движок стартует с --user-data-dir этого профиля и с --armanos-fingerprint, несущим семя.

Сколько открыть разом, решает память машины

Сперва предела не было вовсе, потом в коде стояло число 12. Ошибочны оба. Двенадцать браузеров кладут машину с восемью гигабайтами, а машина с шестьюдесятью четырьмя упирается в запрет на тринадцатом без всякой причины. Теперь предел считается: три гигабайта отдаются системе и программе, остальное делится по одному на браузер, с нижней границей 4 и верхней 32.

Нижняя граница нужна потому, что продукт, не дающий открыть четыре профиля, бессмыслен даже на слабом ноутбуке, а первый отказ человек прочтёт как поломку. Верхняя нужна потому, что после тридцати двух упирается уже процессор и сеть, и такие объёмы живут на сервере. Своё число ставится на экране «Движок», зажимается в те же границы, а ноль означает «посчитать по этой машине».

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

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

4 ГБ памяти
4 профиля, нижняя граница
8 ГБ
5 профилей
16 ГБ
13 профилей
32 ГБ
29 профилей
64 ГБ
32 профиля, верхняя граница

Считается как вся память минус 3 ГБ, по гигабайту на браузер, затем зажимается в границы. Своё число сильнее расчёта внутри тех же границ.

Экран «Движок» с выбором движка и пределом одновременно открытых профилей
Экран «Движок» показывает оба числа: что посчитала машина и что выбрали вы.

Удаление в два шага, и второй означает ровно то, что написано

Удаление кладёт профиль в корзину. У записи проставляется время удаления, а данные остаются там же, где лежали. Профили из корзины пропадают из всех списков и перестают занимать норму тарифа, но на диске пока не тронуто ничего.

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

Полное стирание это вторая кнопка, и понимать её надо буквально. Сперва браузер останавливается и дожидается: стирать под живым процессом это верный способ не стереть ничего, потеряв при этом запись. Затем очищается раздел Electron, удаляется каталог движка с повторами ради дескрипторов Windows, и вместе с ним уходит всё, что упоминало профиль.

Итог стирания сохраняется, а не выбрасывается. Если часть не удалась, вам об этом скажут. На фразу «вернуть будет нельзя» человек опирается перед тем, как продать ноутбук или отдать его сотруднику.

  • Данные браузера

    Раздел Electron (хранилище, кэш, кэш разрешения имён, кэш доступов) и собственный каталог данных движка.

  • Местные решения

    Выбор расширений, расписания и пропуск к стартовой странице.

  • Записи, пережившие профиль

    Его имя в уведомлениях о запусках, его счётчики в статистике и его дневной счёт действий.

  • Копия в облаке

    Шифрованный архив сессии в общей папке, чтобы вторая машина не принесла профиль обратно после стирания.

Полное стирание не отменяется

У стёртого профиля не остаётся ни записи, ни данных, до которых можно дотянуться. Если часть стереть не вышло, программа называет эту часть, а не рапортует об успехе.

Нормы тарифов и что происходит на потолке

Тариф решает, сколько профилей вы держите одновременно. Free даёт 2. Professional идёт от 10 до 100 четырьмя ступенями. Business идёт от 200 до 1000. Enterprise начинается с 5000 и обсуждается разговором, а не кнопкой. Профили сверх ступени стоят по 2 доллара в месяц и добавляются к цене ступени, а не заменяют её. Место в команде сверх включённых стоит 3 доллара в месяц. Квартал дешевле на 10 процентов, год на 20.

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

Проверяется не только создание, но и запуск. Уменьшившийся тариф прежде оставлял двести профилей открываемыми навсегда, поэтому сервер теперь отвечает отказом, когда открыто больше оплаченного, и отдельным отказом, когда доступ именно к этому профилю закрыт. Оба показываются словами сервера, а не общей фразой.

Без сети правила остаются честными в обе стороны. В течение 24 часов после последней удачной сверки профили создаются местно, и они сохраняются с пометкой «не отправлено», а не удаляются при следующем входе. После этого срока создание отказывает. У истёкшей подписки тариф держится ещё 3 дня отсрочки и только потом падает до Free.

ПрофилейУстройствМест в команде
Free211
Professionalот 10 до 10021
Businessот 200 до 100053
Enterprise5000 и больше2020

Чем это не профиль браузера и не контейнер

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

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

Подменяющее расширение работает не с той стороны стены. Оно правит объекты страницы скриптом страницы, поэтому и что оно поменяло, и как поменяло, видно любому скрипту, который посмотрел раньше или посмотрел дважды. ARMANOS подставляет значения внутри движка из семени, переданного в командной строке, и потому страницу об отпечатке стоит прочитать до того, как доверять.

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

Своё хранилищеСвой адрес выходаОтпечаток меняется внутри движка
Окно инкогнитоТолько до закрытияНетНет
Второй профиль браузераДаНетНет
Вкладка-контейнерДаНетНет
VPNНетДаНет
Виртуальная машинаДаТолько с проксиНет, и она сообщает, что виртуальная
Подменяющее расширениеНетНетНет, оно правит страницу из страницы
Профиль ARMANOSДаУ каждого свойДа, из семени в командной строке

Чего это не делает

  • Корзина не очищается сама. Профиль в корзине держит на диске свои куки и весь каталог движка, пока вы не сотрёте его рукой.
  • Изоляция идёт по профилю, а не по машине. Все ваши профили делят один компьютер, один источник времени и один диск, а два профиля на одном прокси делят один адрес выхода.
  • Права «только хозяин» держатся на macOS и Linux. На Windows Node не выставляет списки доступа, файл профиля опирается на папку пользователя, и программа говорит об этом прямо, а не намекает на большее.
  • Пароли внутри файла профиля закрываются только при доступной связке ключей системы. Без неё они пишутся по-старому, и никто не делает вид, что закрыл.
  • Предел одновременно открытых упирается в 32 даже на очень большой машине: дальше ограничивает процессор и сеть, а не память.

Как проверить

Любое утверждение выше лежит в одном файле. Вот эти файлы и проверки, которые держат их честными.

Профиль создаётся со сценарием, шаблоном, папкой, метками и версией ядра, а его номер это семя отпечатка
apps/desktop/src/lib/profiles.js · apps/desktop/test/pinned-and-temporary.js
Список профилей пишется неделимо и правами только для хозяина, а испорченный файл откладывается копией, а не стирается
apps/desktop/src/lib/secureFile.js · apps/desktop/test/secrets-on-disk.js
Предел открытых считается по памяти этой машины, а место занимается до всякой сетевой ходки
apps/desktop/src/lib/engine-config.js · apps/desktop/test/предел-открытых.js
Полное стирание убирает каталог движка, раздел Electron и все записи, пережившие профиль
apps/desktop/src/main/main.js · apps/desktop/test/delete-leaves-nothing.js
Норма профилей идёт за тарифом и проверяется при запуске, а не только при создании
packages/shared/src/index.js · apps/server/test/quota-follows-plan.js

Откройте первые два профиля

Тариф Free даёт два профиля со всеми сценариями и своим прокси у каждого. Без карты, и без сожалений, если не подойдёт.