Chrono Mock
МоваУкраїнська

Запитання та відповіді

Короткі відповіді, зокрема й ті, що про те, чого цей інструмент не робить.

Чи змінює він годинник мого комп’ютера?

Ні, і ніколи не змінюватиме — у цьому весь сенс інструмента. Зсунутий час бачить один процес і дочірні процеси, які він запускає. Ваш вхід у домен, сертифікати, Windows Update і всі інші застосунки весь цей час бачать справжню дату.

Чи потрібні права адміністратора?

Для запуску ні. Zip-архівам не потрібен інсталятор, вони нічого не пишуть у реєстр і працюють із теки, яку можна носити на флешці. Необов'язковому .msi права адміністратора потрібні один раз, для встановлення, бо він ставиться для всіх облікових записів на комп'ютері.

Чи працюватиме він з моїм застосунком?

Чесна відповідь: жоден інструмент такого роду не може пообіцяти цього заздалегідь — тому цей вимірює. Кожна сесія закінчується вердиктом (працює, працює частково, не працює), списком каналів часу, які застосунок справді читав, із лічильником викликів по кожному, і списком каналів, що покриті не були.

Застосунок може читати годинник шляхом, який ніщо не перехопило, — із сервера, з бази даних, через шар середовища виконання. Коли так трапляється, вам про це кажуть, а не залишають припускати, що тест пройшов.

Чи працює він із застосунками на .NET, Java і Python?

Частково, і відмінності важливі. Усі три позначені як експериментальні: вони працюють на тестових цілях, широко не перевірялися, а вбудований аудит — ваше джерело істини, а не цей абзац.

  • .NET — настінний годинник і часовий пояс сесії покриті. Stopwatch лишається на справжньому високоточному лічильнику, якщо ви не ввімкнете його масштабування.
  • Java — настінний годинник, минулий час і часовий пояс сесії покриті. Пояс надходить як фіксоване зміщення з назвою на кшталт GMT+05:30.
  • Python — time.time і datetime покриті. perf_counter і, починаючи з Python 3.13, monotonic спираються на високоточний лічильник, якщо ви не ввімкнете масштабування.

Чи працює він із застосунками на Electron і Chromium?

Так, іншим механізмом. Їхній годинник живе в ізольованому рендерері, куди впровадження не сягає, тож застосунок запускається з портом налагодження й чистим одноразовим профілем, а його власні API часу JavaScript переводяться на годинник сесії — зокрема всередині Web Worker, де таймер часто й живе насправді.

Одне обмеження варто знати: головний процес застосунку Electron працює в Node, куди сесія не сягає, тому він залишається на справжньому годиннику, і звіт про це каже. Сторінки та їхні воркери читають часовий пояс сесії.

Як працює режим Chromium і Electron — до чого він сягає, до чого ні й чому порт налагодження — це те, на що варто звернути увагу.

Чи можна змусити час іти швидше за справжній?

Так. Виберіть цілочисельний множник, і годинник застосунку піде з такою швидкістю — x1440 перетворює добу на хвилину, тож 30-денний пробний період спливає приблизно за півгодини. Можна також зупинити годинник або перестрибувати вперед і назад посеред сесії.

Зворотні відліки й таймери лежать на окремій осі, і їх прискорення — окремий перемикач, бо їх масштабування змінює поведінку, від якої залежить безліч застосунків.

Чи можна змінити лише часовий пояс, не змінюючи дати?

Так. Сесія несе власне фіксоване зміщення, видиме цьому процесу, поки системний пояс лишається рівно там, де був. Це та частина, яку більшість інструментів пропускає, і саме так відтворюється помилка, що виникає лише в клієнта за п’ять часових поясів від вас.

А як щодо літнього часу?

Пояс сесії — це фіксоване зміщення без літнього часу. Сесія, налаштована на Польщу, лишається на вибраному вами зміщенні незалежно від того, чи показує її годинник березень, чи липень, тож запуск, що перетинає справжній перехід, розходиться на годину з тим, що цей пояс справді показав би.

Тому проведення застосунку через перехід на літній час цей інструмент поки не робить, а калькулятор дат каже про це, а не вгадує.

Чому мій антивірус на нього спрацьовує?

Тому що впровадження бібліотеки в інший процес — законна задокументована техніка Windows, якою користуються й шкідливі програми. Це хибне спрацювання, спричинене самою технікою, а не чимось, що інструмент робить із вашою машиною. Бібліотека, що впроваджується, — chrono_hook.dll, зібрана з відкритого вихідного коду під GPL-3.0, і ви можете перезібрати її самі. Режим Chromium і Electron не впроваджується взагалі.

Сторінка завантаження каже, що з цим робити.

Чи це спосіб продовжити пробний період або обійти ліцензію?

Ні, і він не для цього створений. Chrono Mock призначений для тестування програмного забезпечення, за яке ви відповідаєте, — вашого власного спливу ліцензії, вашої власної логіки поновлення, вашого власного звіту на кінець місяця. Жоден приклад, сценарій чи сторінка тут ніколи не покажуть, як продовжити чужий пробний період.

Програми із захистом ліцензії — насправді той випадок, який із найбільшою ймовірністю переможе цей інструмент: код захисту від втручання часто читає час шляхами, обраними навмисно так, щоб їх було важко перехопити, а відкат годинника назад — умова, яку такі програми пишуть, щоб виявляти. Планується функція в зворотний бік — режим, що проганяє серію маніпуляцій із часом проти вашого власного застосунку й повідомляє, які з них упіймав ваш захист.

Чи можна використовувати його в безперервній інтеграції?

Так. Збірка для командного рядка — це окреме завантаження близько 2,4 МБ без середовища виконання для встановлення. Кожна команда розмовляє мовою --json і завершується кодом, за яким конвеєр може розгалужуватися, а сесія може записати свої докази у файл.

Чим він відрізняється від RunAsDate?

RunAsDate перехоплює п’ять функцій настінного годинника і робить це добре. Цей інструмент відстежує 44 каналів часу й переводить 30 з них на годинник сесії, уміє прискорювати годинник, дає процесу власний часовий пояс, іде за дочірніми процесами і потім каже вам, які канали справді було покрито. Крім того, він має відкритий код, а RunAsDate - закритий freeware. RunAsDate, зі свого боку, уміє підключатися до вже запущеної програми, а цей інструмент ні.

Повне порівняння каже й про те, де RunAsDate — кращий вибір.

Це libfaketime для Windows?

За духом — так: та сама ідея зсувати час для однієї програми, а не для машини. На практиці це інша реалізація, бо libfaketime залежить від LD_PRELOAD, якого в Windows немає. Є сторінка рівно про це.

Чи це безкоштовно і чи надсилає воно щось кудись?

Безкоштовно й з відкритим вихідним кодом під GPL-3.0. Без облікового запису, без телеметрії, і воно взагалі не звертається до інтернету — увесь інструмент працює з висмикнутим мережевим кабелем.

У вікна є два елементи керування, що ведуть назовні, тому їх варто назвати, а не змушувати вас їх шукати: кнопки Donate і GitHub у рядку заголовка. Натискання будь-якої з них передає адресу вашому браузеру, і з’єднується саме ваш браузер. Chrono Mock не відкриває з’єднань ні в тому, ні в іншому випадку, і ніщо з виміряного ним про ваш застосунок нікуди не йде.