Каждую третью субботу сентября, а значит и сегодня, отмечается день свободного ПО, хотя об этом мало кто знает. При словах о свободном программном обеспечении на ум приходит разве что Linux, Android без сервисов Google и какие-то малоизвестные проекты добровольцев, уступающие платным аналогам. В этой статье хочу поделиться тем, какую роль на самом деле играет такое ПО, и почему мы сталкиваемся с ним каждый день. Для примера буду опираться на несколько мобильных приложений, над которыми я работаю в последние годы.
Процесс разработки
Как идея проекта превращается в готовое приложение? Собирается команда инженеров с разной специализацией — кто-то пишет непосредственно приложение, кто-то серверную часть для хранения и синхронизации данных, а кто-то программирует платы и занимается схемотехникой, если помимо приложения продукт включает в себя устройство-компаньон.
Но что из себя представляют эти процессы? Неужели инженеры бессонными ночами рисуют и программируют каждую кнопку, а для взаимодействия с камерой или GPS-датчиком устройства стучатся напрямую в процессор, адаптируя всё под каждое отдельное устройство?
Фактически, iOS- и Android-приложения на самом деле состоят из набора компонентов, которые создавались инженерами в Apple и Google для стабильной работы всего ПО в системе. Для разработки под Android существует специальный набор инструкций, именуемый SDK, он обновляется с каждой версией системы и доступен для загрузки бесплатно. Именно поэтому любой желающий может писать и даже распространять Android-приложения без затрат, но это лишь вершина айсберга.
Такие пакеты компонентов из операционных систем обеспечивают лишь продуманность и строгость интерфейса, а также взаимодействие с различными датчиками устройства, на котором приложение запущенно. Но ведь приложение это не просто красивый макет, оно должно каким-то образом хранить, обрабатывать и отображать информацию. Что если нам нужно получить список картинок из интернета и отобразить их в единой ленте, да ещё и чтобы мы могли с ними взаимодействовать?
Википедия для инженеров
Подавляющее большинство приложений состоят из аналогичных компонентов и задействуют похожие функции — отобразить картинку, показать кастомизированное текстовое поле, включить песню или отправить веб-запрос по нажатию кнопки. Если бы каждая компания предпринимала свой подход к каждому из этих действий, то на разработку бы уходило очень много времени, а с каждым обновлением системы подход устаревал и его пришлось бы адаптировать под новые реалии. А если разработчик вообще работает один и не может позволить себе такие заигрывания с системой?
Наступая на эти грабли снова и снова, сообщество разработчиков сплотилось и решило, что лучше один раз скооперироваться и написать общедоступную стороннюю библиотеку, используя знания миллионов программистов, а также предоставить свободный доступ к этому коду, давая возможность каждому пользователю предложить свои улучшения. Так появилась википедия для программистов — GitHub — где каждый может поделиться своими наработками и помочь улучшить чужие.
Поэтому сегодня разработчик, которому нужно показать в приложении ленту с картинками, запустить сервер в пару кликов или даже создать нейронную сеть, не должен изобретать велосипед и писать всё с нуля. Достаточно ввести в поисковик описание поставленной задачи и посмотреть доступные библиотеки, которые уже доведены до совершенства миллионами инженеров по всему миру. Именно благодаря этому мы можем довольствоваться сервисами, которые быстро запускаются и стабильно работают.
Оно повсюду!
Напоследок поделюсь несколькими сторонними Android-библиотеками, которыми я и миллионы разработчиков пользуемся практически в каждом проекте, даже если вы об этом никогда не задумывались.
Firebase — это целый комплекс сервисов, купленный Google, который с трудом назовёшь просто библиотекой, но всё же. Если нужно быстро внедрить в приложение авторизацию по SMS или почте, а также отслеживать возникающие ошибки — всего за час можно всё это настроить в Firebase и интегрировать на сайт или в приложение.
Retrofit — легко и умно организует все серверные запросы, позволяет быстро и автоматически преобразовывать полученный ответ в объекты для хранения и отображения в приложении.
Picasso — отображает картинки из интернета или локального хранилища, позволяя гибко настраивать размер и положение, а также не закрывать приложение при возникновении непредвиденных ошибок.
Room — позволяет работать с базами данных, хотя на заре Android такой возможности очень не хватало. Если какое-то Android-приложение хранит сотни мегабайт структурированных данных, будьте уверены — грамотным хранением и мгновенным обновлением руководит именно эта бесплатная и открытая библиотека.
TensorFlow — даёт возможность легко создать и натренировать нейросеть, например, для распознавания картинок. Создана Google, но некоторые сборки поддерживаются исключительно общественностью.
Надеюсь я ответил на многие ваши вопросы о свободном ПО и о том, почему оно так важно. А тех, для кого этот праздник по-настоящему профессиональный, поздравляю!