Последний год обучения в школе – это трудное время для многих людей, и я не был исключением. Я работал над своим выпускным проектом – приложением для общения в чате для моей школы, Университета Лагоса. Моей целью было включить текстовый чат, видеозвонки и голосовые вызовы в приложение, которое я собирался написать на языке Golang. Я сделал это, и оно заработало. Все было готово… или я так думал. На этапе тестирования я попросил нескольких одноклассников, около 20 человек, подключиться к моему серверу, чтобы протестировать приложение. Оно лагало и было практически непригодно для использования. Мне пришлось искать альтернативу. Затем внезапно началась забастовка ASUU, и появилось время переписать мой проект 10-50 раз, столько раз, сколько я хотел. ASUU, Союз академического персонала университетов, – это орган, которому подчиняются все преподаватели университетов, и его члены объявили бессрочную забастовку. Причина? У правительства были какие-то невыплаченные взносы или что-то в этом роде. В любом случае, забастовка означала отсутствие занятий, отсутствие занятий означало отсутствие школы, отсутствие школы означало больше времени… много времени.
Я знал о Русте и раньше, и сам провел небольшое исследование. Несколько вещей выделялись для меня. Его низкоуровневый доступ, отсутствие сборщика мусора и его знаменитая скорость. Он отвечал всем моим требованиям. Кроме того, реализация моего проекта на Rust потенциально означала снижение затрат. Rust действительно низкоуровневый, поэтому он максимально использует доступные ресурсы. Это означало, что мне не нужно было приобретать мощный сервер для удовлетворения потребностей моего проекта. Поэтому я начал изучать Rust.
Поскольку забастовка закончилась, у меня было много свободного времени, чтобы изучать то, что мне нужно, и все шло гладко, пока я не уперся в кирпичную стену. Я не мог найти реализацию Web RTC в Rust. Web RTC – это фреймворк, который позволяет браузерам и веб-приложениям общаться в режиме реального времени. Важно знать, что, хотя Rust и наделал много шума в последнее время, он все еще относительно новый по сравнению с другими языками и технологиями разработки. Все еще есть вещи, которые не были полностью абстрагированы до уровня, на котором обычные разработчики могут легко получить доступ к функциям, не имея глубокого понимания того, как они работают. Web RTC была одной из них. Сейчас, когда я вспоминаю об этом, я нашел одну такую программу, но это был, по сути, просто C, встроенный в Rust. Хотя это вроде как работало, это было не то, что я хотел. Я поискал еще немного, потом нашел человека, Rainliu, который работает над реализацией Web RTC в Rust. Однако работа была на ранней стадии, фактически, все, что было сделано, это список фреймворков, которые позволят Web RTC работать в Rust. Я решил помочь, или, по крайней мере, попытаться помочь. Я изучал Rust всего несколько недель и хотел помочь создать библиотеку.
Идея заключалась в переносе Pion, библиотеки Web RTC на Go в Rust, и я играл важную роль в первые дни проекта. Я занимался библиотекой RTP, SRTP и Multicast DNS. Я потратил много времени, которое, благодаря забастовке, у меня было в избытке, и мы добились значительного прогресса. Фактически, многие люди поддержали проект, сделав его достойным названия Open source. В настоящее время на Github у него почти 2000 звезд.
На моем нынешнем месте работы, в компании Ockam, мы работаем со многими языками и стеками. Я работаю в DevOps, но Rust играет в нем важную роль. Удивительно, но я узнал об этой работе в результате массовой рекламы первого мероприятия, проводимого Rust Nigeria в 2020 году. Компания Ockam разместила объявление о наборе сотрудников под одним из рекламных твитов. Ознакомившись с их сайтом, я заинтересовался и подал заявление. Ockam занимается в основном вопросами ИТ-безопасности, поэтому многие их продукты связаны с вопросами безопасности. Готовясь к собеседованию, я решил использовать одну из их реализаций Rust для защиты приложения, которое я сделал раньше, в частности, моей реализации MDNS. В MDNS есть известный недостаток в безопасности, при котором, по сути, личность может быть выдана за свою, поэтому я использовал инструментарий Ockam для защиты. Я представил демо-версию этого решения на собеседовании и получил работу.
Я не могу себе представить, что когда-нибудь уйду из Rust, и я не верю, что кто-то, кто начинает работать с Rust, захочет вернуться назад. Мысль о том, что компилятор на твоей стороне, дает такую уверенность. Есть ошибки, которые я бы сделал, и компилятор успокоил бы тебя, а затем проучил. Есть ошибки, которые невозможно принять в производство, если следовать правилам и предписаниям компилятора. Например, если вы не используете небезопасный код, повреждение памяти – это не то, о чем стоит беспокоиться в производстве.
Мой опыт работы с Rust с 2020 года оказался бесценным. С появлением COVID и ростом потребности в услугах видео- и голосовой связи стремление запустить мой проект достигло апогея. Rust позволил мне легко продолжать работу над тем, что я хотел, и это привело меня к открытому исходному коду, а с открытым исходным кодом пришли опыт и связи.
Эта история основана на путешествии Мишеля Ути с Rust.