П’ятдесятиденний термін придатності: чому macOS відмовляється працювати без перезавантаження
Більшість користувачів Mac звикли, що їхні комп’ютери можуть тижнями перебувати в режимі сну, не потребуючи повного вимкнення чи перезавантаження. Проте виявилося, що операційна система має досить жорсткий, хоч і ненавмисний «термін придатності» одного сеансу роботи. Якщо ваш аптайм наближається до позначки у 50 днів, готуйтеся до того, що мережеві можливості системи перетворяться на гарбуз.
Математична пастка 32 біт
Проблему виявили фахівці компанії Photon, які займаються моніторингом сервісів iMessage. Під час аналізу парку комп’ютерів вони помітили дивну поведінку: машини, що працювали без перерви тривалий час, раптово втрачали здатність приймати нові мережеві з'єднання. Детальне дослідження Photon показало, що корінь зла криється у внутрішньому лічильнику tcp_now.
Цей лічильник відповідає за відстеження часу з моменту завантаження системи для стека TCP. Проблема в тому, що він представлений як 32-бітне беззнакове ціле число. Максимальне значення такого числа становить 4 294 967 295. Оскільки tcp_now рахує час у мілісекундах, він неминуче переповнюється та обнуляється рівно через 49 днів, 17 годин, 2 хвилини та 47 секунд. У цей момент логіка обробки пакетів ламається, оскільки система очікує послідовного зростання значень, а отримує «нуль».
Симптоми мережевого паралічу
Найцікавіше в цій ситуації те, як саме виявляється збій. Комп’ютер не вимикається та не видає критичних помилок. Він продовжує відповідати на запити ping, оскільки протокол ICMP працює на нижчому рівні та не залежить від цього лічильника. Більше того, вже встановлені з'єднання можуть продовжувати стабільно працювати. Проте жоден новий запит через TCP/IP не буде оброблений.
Для зовнішнього спостерігача система виглядає живою, але фактично вона ізольована від світу. Для звичайного власника MacBook, який закриває кришку ноутбука кілька разів на день, це навряд чи стане катастрофою. Проте для серверних рішень на базі macOS або систем моніторингу, де аптайм вимірюється місяцями, це критичний недолік. Наразі єдиним способом вирішення проблеми є превентивне перезавантаження до настання фатальної позначки.
Очікування на патч
На момент виявлення багу офіційних коментарів на ресурсах Apple не з'являлося, проте технічно виправити це нескладно. Перехід на 64-бітний лічильник або коректна обробка переповнення — стандартні практики в індустрії. Дивує лише те, що такий фундаментальний прорахунок у мережевому стеку залишався непоміченим стільки років. Можливо, інженери компанії просто не вірили, що хтось не перезавантажуватиме комп’ютер більше півтора місяця.
Якщо ваш робочий комп'ютер раптово «втомився» від мережі, можливо, варто придивитися до компактних рішень. Наприклад, Minisforum Elite M1 Lite пропонує непогану продуктивність для тих, кому потрібен процесор Meteor Lake за адекватні гроші.