Разработка программного обеспечения появилась вместе с первыми компьютерами всего несколько десятков лет назад. Тем не менее, этот род деятельности уже прошел невероятно длинный путь, технологии изменились до неузнаваемости. Возникают новые языки, меняются парадигмы программирования. Все это происходит для увеличения скорости и качества разработки, и, как следствие, снижения затрат.
Уже не один год процветает разработка программного обеспечения с открытым исходным кодом (open-source). Большое количество известных продуктов (например, браузер Firefox, операционная система Linux) разрабатываются таким образом. Любой желающий может их использовать на безвозмездной основе, а также участвовать в разработке, предлагать свои изменения. Участие в подобных проектах помогает набраться опыта и сделать в итоге полезный и качественный продукт, поэтому в будущем их популярность будет только возрастать.
С каждым годом сложность и объем программного обеспечения только растет. Зачастую количестве строк исходного кода в современных приложениях исчисляется миллионами. Компьютерные игры, фото/видео редакторы, браузеры - все это огромные проекты со сложной архитектурой. Большие размеры влекут за собой высокие требования к производительности систем, на которых ведется разработка.
Если говорить о компилируемых языках программирования, то как раз процесс компиляции является наиболее ресурсозатратным. Часто возникают ситуации, когда для тестирования нескольких изменений в коде с большим числом зависимых от него элементов приходится заново собирать весь проект. Такая ситуация становится неприемлемой, когда разработка ведется на условном ноутбуке со слабым процессором. Возникает естественная идея возложить обязанность компиляции кода на удаленный сервер. Это позволило бы экономить время сотрудников, сделать процесс разработки программного обеспечения более доступным.
В данной работе будут рассмотрены и проанализированы существующие подходы к решению задачи удаленной компиляции и предложен альтернативный подход, сочетающий в себе простоту использования и высокую скорость работы. Кроме того в разрабатываемой системе будут использованы методы обеспечения информационной безопасности.
Постановка задачи
Целью данной работы является разработка консольного клиент-серверного приложения, позволяющего клиенту скомпилировать файлы на серверном хосте.
В качестве операционной системы под которую будет вестись разработка выбран Linux. Данная операционная система обладает популярностью среди разработчиков по нескольким причинам. Благодаря тому, что Linux распространяется на бесплатной основе, он был портирован на большинство архитектур. Поэтому чаще всего именно эта операционная систе¬ма функционирует на серверном оборудовании, бытовой и промышленной технике. Используя Linux на локальном компьютере разработчик получает окружение идентичное с тем, в котором будет работать его продукт. Кроме того, данная операционная система обладает удобной командной строкой, продуманной файловой системой и низкими требованиями к ресурсам.
Основными требованиями к разрабатываемому приложению являются:
• Простота и удобство использования
• Высокая скорость работы
• Обеспечение безопасности передачи данных
В задачи работы входит:
• Выявление преимуществ и недостатков существующих подходов к решению данной проблемы
• Разработка собственной системы, удовлетворяющей заявленным требованиям
• Анализ полученной системы
В данной работе был проведен анализ существующих решений для организации процесса удаленной компиляции. Были выявлены основные недостатки, касающиеся трудоемкой конфигурации, узкой направленности решений.
Далее был произведен обзор компонентов и примененных подходов разработанной системы. Для обеспечения простоты и удобства использования были внедрены элементы автоматизации и возможности опциональной тонкой настройки. Выборочная компиляция, сжатие данных обеспечили высокую скорость работы приложения. Использование современных криптографических протоколов повысило надежность передачи данных.
Полученная система была проанализирована, выявлены сильные и слабые стороны. Представлены направления дальнейшей модернизации.
Поставленные задачи были выполнены, а цель работы достигнута.
1. Visual Studio Code Remote-SSH extension -
URL: https://code.visualstudio.com/docs/remote/ssh
2. Secure Shell cryptographic network protocol -
URL: https://en.wikipedia.org/wiki/Secure_Shell
3. Distcc tool - URL: https://github.com/distcc
4. Benchmark results for distcc -
URL: https://distcc.github.io/benchmark.html
5. W. Richard Stevens; Bill Fenner Andrew M. Rudoff (2003). Unix Network Programming, Volume 1: The Sockets Networking API (3rd Edition). Addison-Wesley Professional.
6. Advanced Programming in the UNIX environment, third edition, W. Richard Stevens and Stephen A. Rago, Addison-Wesley, 2013
7. Postel, Jon, "Transmission Control Protocol - DARPA Internet Program Protocol Specification RFC 793, DARPA, September 1981.
8. Linux Man pages - URL: https://www.kernel.org/doc/man-pages/
9. C language standard -
URL: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
10. Berkeley sockets -
URL: https://en.wikipedia.org/wiki/Berkeley_sockets
11. MD5 message-digest algorithm -
URL: https://en.wikipedia.org/wiki/MD5
12. OpenSSL Cryptography and SSL/TLS toolkit -
URL: https://www.openssl.org
13. SSL/TLS cryptographic protocols -
URL: https://en.wikipedia.org/wiki/Transport_Layer_Security
14. Digital certificate -
URL: https://en.wikipedia.org/wiki/Public_key_certificate
15. Apache Maven - URL: http://maven.apache.org/
16. CNU Make - URL: https://www.gnu.org/software/make/
17. The Java programming language Compiler Group -
URL: http://openjdk.java.net/groups/compiler/
18. GNU Tar - URL: https://www.gnu.org/software/tar/
19. GNU Gzip - URL: https://www.gnu.org/software/gzip/
20. GNU GCC - URL: https://gcc.gnu.org/