Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Независимо от того, сколько вложений компании-разработчики могут потратить на инструментарий и обучение своих разработчиков, «C++, по своей сути, не является безопасным языком», сказал Райан Левик (Ryan Levick) 'cloud developer advocate' из Microsoft на виртуальной конференции AllThingsOpen в прошлом месяце, объясняя в виртуальной беседе почему Microsoft постепенно переходит с C/C++ на Rust для создания своего инфраструктурного программного обеспечения. И вдохновляет других гигантов индустрии программного обеспечения задуматься о том же.
«Мы используем языки, которые не дают нам возможности защитить себя от подобных уязвимостей, потому, что они довольно стары и происходят из другой эпохи», — сказал он. «C++ не является безопасным для памяти языком и никто не притворялся бы, что это не так», — сказал он.
Фактически, Microsoft сочла C++ более неприемлемым для написания критически важных программ. Отрасль крайне нуждается в переходе на производительный, безопасный для памяти язык для низкоуровневой работы систем. А лучший выбор на рынке сегодня — это Rust, сказал Левик.
C/C++ не могут быть исправлены
Сегодня C и C++ являются популярными языками для написания системного программного обеспечения. Они быстрые, только с ассемблером между кодом и самой машиной.
Но отрасль страдает от всех ошибок, связанных с памятью многие из которых представляют угрозу безопасности, вызванные этими языками. Сейчас по словам Левика, 70% CVE созданных в Microsoft, являются проблемами безопасности памяти. «Нет никакой реальной тенденции, это просто остается неизменным», — сказал он. «Несмотря на огромные усилия с нашей стороны, чтобы решить эту проблему, это все еще кажется обычным делом».
С финансовой точки зрения этот переход имеет смысл, учитывая растущую стоимость исправления этого нескончаемого потока ошибок, связанных с памятью. Еще в 2004 году каждая ошибка связанная с памятью, стоила отрасли около 250.000 долларов каждая и эта оценка Microsoft, вероятно, находится на более низком уровне, сказал Левик.
Конечно, есть ряд попыток повысить безопасность C++, но несмотря на то, что каждая из них эффективна, они не решает проблему полностью.
Один из подходов, который давно используется, состоит в том, чтобы больше обучать программистов написанию более безопасного кода. Но «нет никаких доказательств того, что комплексное обучение разработчиков на C и C++ действительно решит эту проблему любым существенным способом», — сказал Левик, сославшись на собственные наработки в Microsoft, предназначенные для внутреннего обучения разработчиков.
Статический анализ упоминается, как еще одно возможное решение. Но статический анализ требует слишком много времени: его необходимо подключить к системе сборки. «Так что есть большой стимул не использовать статический анализ» — сказал Левик. «Если он не включен по умолчанию, он не поможет».
То же самое касается проверок времени выполнения: «Невозможно или по крайней мере, чрезвычайно трудно понять, когда используются контракты проверки во время выполнения, а когда нет», — сказал он, добавив, что они также сопряжены с эксплуатационными накладными расходами.
Лучший шанс для отрасли
В ответ на проблему ошибок связанных с использованием памяти Центр реагирования Microsoft Security запустил инициативу «Язык программирования безопасных систем». В ней некоторая работа была посвящена укреплению C/C++. Язык Верона — новый язык программирования, создаваемый для безопасного низкоуровневого программирования, также был создан здесь. Но третий аспект стратегии этого проекта, в которую они верят больше всего, заключается в том, чтобы поддержать «наилучшие шансы отрасли для непосредственного решения этой проблемы».
«И мы считаем, что это Rust», — сказал он.
По производительности Rust находится на одном уровне с C/C++ и, возможно, даже немного быстрее. Rust повышает производительность труда разработчиков благодаря менеджеру управления пакетами, современным средам тестирования и тому подобному. И программисты за это любят Rust.
Но главная причина, по которой Microsoft так увлечена Rust, заключается в том, что это язык безопасный для памяти, с минимальными проверками во время выполнения. Rust выделяется в создании корректных программ. Корректность означает примерно то, что программа проверяется компилятором на небезопасные операции, что приводит к меньшему количеству ошибок во время выполнения. Ключевое слово 'unsafe' является опцией, но не используется по умолчанию. Небезопасный код в Rust почти всегда является подмножеством большего объема безопасного кода. Небезопасный 'unsafe' режим необходим для задач по выделению памяти, например для написания драйверов устройств. Но даже здесь небезопасные части заключены в безопасный API.
По словам Левика, эту способность безопасно программировать не следует воспринимать легкомысленно. Фактически, Rust может обеспечить более чем 10-кратное улучшение, что делает его полезным для инвестиций. Во многом это связано с тем, что практически весь код C/C++ нуждается в аудите на предмет небезопасного поведения, в то время как небезопасный код написанный на Rust, который необходимо будет проверить, является лишь небольшим подмножеством основной кодовой базы.
Хотя Microsoft оптимистично настроена на Rust, Левик признает, что разработчики ядра Microsoft не прекратят использовать C/C++ в ближайшее время.
«У нас в Microsoft много C++ и этот код никуда не денется» — сказал он. «Фактически, Microsoft продолжает писать c++ и будет писать некоторое время».
Много инструментария построено на C/C ++. В частности, двоичные файлы Microsoft сейчас почти полностью собраны компилятором Microsoft Visual C++, который создает двоичные файлы MSVC, тогда как Rust использует LLVM.
Возможно, самая большая проблема, тем не менее, является культурной. «Есть некоторые люди, которые хотят выполнить свою работу на языке, который они уже знают», — признался Левик.
Тем не менее, индустрия, похоже, движется в сторону Rust. Amazon Web Services использует его, в частности для развертывания безсерверной среды выполнения (Lambda serverless runtime), а также для некоторых частей EC2. Facebook начал использовать Rust как и Apple, Google, Dropbox и Cloudflare.
https://www.youtube.com/watch?v=NQBVUjdkLAA
Объявлены даты All Things Open 2020: 20-22 октября.
Ресурс "The New Stack" не позволяет оставлять комментарии непосредственно на сайте. Мы приглашаем всех читателей, которые хотят обсудить историю или оставить комментарий, посетить нас в Twitter или Facebook. Мы также приветствуем ваши новостные советы и отзывы по электронной почте: **feedback@thenewstack.io.
Amazon Web Services является спонсором The New Stack.