Замена двигателя "на ходу", или как Apple незаметно переезжает на язык программирования Rust
Статья вдохновлена публикацией Apple is quietly rewriting iOS and it’s not in Swift or Objective-C от Devlink Tips на платформе Medium.
Apple не так и часто делает громкие заявления о том, как устроены её технологии внутри. Чаще всего мы видим красивые презентации про новые функции, а изменения в фундаменте операционной системы проходят мимо внимания широкой публики. Но именно там — на уровне кода, который управляет железом и безопасностью, — решается будущее линеек iPhone, iPad и Mac.
В последние годы появились убедительные признаки того, что Apple всё активнее использует язык программирования Rust в своей работе над сервисами и при разработке новых версий своих ОС. Не Swift, который компания сама разработала и активно продвигает вот уже больше 10 лет, и не классический Objective-C, а именно Rust — инструмент, о котором ещё несколько лет назад знали в основном энтузиасты.
Почему Apple вообще нужен новый язык?
История языков программирования в экосистеме Apple всегда была про баланс удобства и контроля. Сначала — Objective-C, смесь C, SmallTalk и объектной модели, которая десятилетиями держала на своих плечах техническую базу macOS и iOS. Потом, уже при Тимe Куке, появился Swift: более современный и удобный для новичков.
Swift отлично подошёл для приложений и интерфейсов, но при этом остался зависим от старых библиотек на C. То есть полностью избавиться от ошибок памяти или уязвимостей Apple не смогла. Внутри системы по-прежнему жили десятки миллионов строк кода на C и Obj-C, с которыми разработчики постоянно боролись.
Rust же решает эту проблему иначе. Он изначально создавался так, чтобы гарантировать безопасность памяти и работать с многопоточностью без тех головных болей, к которым привыкли программисты на C. Для компании масштаба Apple это означает две вещи: меньше критичных багов и выше стабильность для пользователей.
Так что же? Swift — плохой язык? Нет, просто кажется, что компания осознала, что его одного будет недостаточно для по-настоящему крепкой, современной и безопасной базы для своих операционных систем.
Почему именно сейчас?
Если посмотреть шире, тренд на Rust уже стал очевидным. Microsoft внедряет его в Windows, Google использует в Android, Amazon — в инфраструктуре AWS. Каждая из этих компаний поняла, что классические языки вроде C++ слишком уязвимы для современного мира, где безопасность — это не только «удобство», а вопрос доверия пользователей и даже политики.
Apple не может отставать. Но они очень редко громко анонсируют подобные подобные изменения «под капотом». Именно поэтому про Rust в контексте iOS мы слышим не с презентаций, а из косвенных источников: вакансий и утечек.
Что получат пользователи?
Конечно, ни один владелец iPhone не увидит уведомления «теперь ваш телефон работает на Rust». Но на практике выигрывает каждый: техническая база на Rust принесет в ОС более стабильную работу приложений, меньше уязвимостей в безопасности и ускоренную работу в фоновом режиме.
Попробую объяснить на пальцах плюсы Rust. Одна из главных проблем при создании сложных программ — ошибки, связанные с памятью. Например, из-за ее "утечек" приложения могут вылетать или зависать.
Представьте, что у вас есть шкаф с ящиками, и программа должна точно знать, какой ящик открыт, какой закрыт, и что в нём лежит. На традиционных языках вроде C++ иногда случается путаница: ящик закрыли, но программа пытается в него заглянуть. Или наоборот — ящик открыли дважды и вещи перепутались. Это приводит к сбоям, «утечкам» ресурсов и даже к уязвимостям в безопасности. Rust же устроен так, что такие ошибки он просто не даст совершить. В его системе правил каждый ящик «принадлежит» только одному человеку (приложению/процессу), и если он отдаёт его другому, то прежний уже не может туда лезть.
Благодаря всему этому исчезают целые классы проблем, которые годами не давали покоя инженерам: случайное обращение к уже закрытой памяти, конкуренция нескольких частей программы за один и тот же ресурс или постепенная потеря памяти. Таким образом, системные сервисы или приложения, написанные на Rust, могут просто быть на порядок стабильнее в многопоточный работе и решить привычную для многих разработчиков головную боль.
Звучит как сказка какая-то. В чем подвох?
Справедливости ради, не все разработчики или эксперты считают, что Apple настроена на полный масштабный переход на Rust. И вот их основные аргументы:
- Старая техническая база и сложность миграции. Огромное число строчек на C и Objective-C, множество зависимостей, библиотек, драйверов. Переписать всё — дорого и рискованно. Если даже Rust и очень хорош по безопасности, многопоточности и отказоустойчивости — интеграция с существующими компонентами, поддержка всех устройств, совместимость — это большая работа. Да и вообще, перенос всех систем на новый язык может (особенно первое время) создать больше проблем, чем их решений.
- Специализация vs универсальность. Swift по-прежнему вполне удобен для работы с интерфейсами и при разработке новых приложений. Тогда как более узконаправленный Rust скорее удобнее использовать только в тех кусках ОС, где нужны экстремально высокая безопасность или производительность.
- Отсутствие какого-то подтверждения со стороны компании. Пока Apple не делала официального объявления, что переписывает все на Rust. А все косвенные признаки — это не то же самое, что стратегическая цель.
Справедливые сомнения, не правда ли? Apple чаще действует эволюционно, а не революционно. А переписывать всё с нуля может быть слишком рискованно, особенно для систем, которыми прямо сейчас пользуются миллиарды людей.
Итог
Но Apple уже однажды удивила разработчиков, анонсом языка Swift. Теперь компания делает новый шаг, пусть и куда менее заметный. Rust становится её «секретным оружием»: фундаментальной технологией, которая не бросается в глаза, но задаёт тон на годы вперёд.
Можно сказать так: Swift отвечает за красивый фасад, Rust — за прочный фундамент. Вместе они смогут сделать iOS, iPadOS и macOS системами, которым можно доверять и которые готовы к вызовам будущего.