Isolating software development environments
Kaaretkoski, Mika (2018)
Kaaretkoski, Mika
2018
Tietotekniikka
Tieto- ja sähkötekniikan tiedekunta - Faculty of Computing and Electrical Engineering
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2018-11-07
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tty-201810242460
https://urn.fi/URN:NBN:fi:tty-201810242460
Tiivistelmä
Software development processes are evolving constantly, aiming to more agile and efficient approaches. Agility demands ability to adapt to quick changes in requirements, which can lead to modifications in development environments. Managing environments for developing and testing has become an essential part of efficient development work. Developers should be able to modify environments safely without having to worry about disrupting something else in the system. Working on multiple projects at the same time without conflicting dependencies should also be possible. The amount of software dependencies in a modern application using open-source components is typically very large, so conflicts between projects are rarely avoided without any isolation between environments.
Virtualization is at a key role providing not only the needed isolation, but also the tools for managing the environments. Virtual machines and containers utilizing modern tools and large ecosystems for open-source software make creating and managing isolated development environments efficient. There are also other means besides virtualization to avoid conflicting environments, one of which is using a functional package manager that allows installing software components in isolation from each other.
In this thesis, different ways of creating an isolated development environment are discussed. Three approaches achieving different levels of isolation are presented; full isolation using virtual machines, namespace isolation using containers and component isolation using a functional package manager. The focus is on introducing the technologies and tools for isolating a development environment using a simple practical example for each approach. The approaches are compared on a high level on few relevant categories which are level of isolation, reproducibility, resource overhead, usability and support and availability. The thesis is concluded with a quick summary and some discussion about choosing between the isolation solutions.
Virtualization is at a key role providing not only the needed isolation, but also the tools for managing the environments. Virtual machines and containers utilizing modern tools and large ecosystems for open-source software make creating and managing isolated development environments efficient. There are also other means besides virtualization to avoid conflicting environments, one of which is using a functional package manager that allows installing software components in isolation from each other.
In this thesis, different ways of creating an isolated development environment are discussed. Three approaches achieving different levels of isolation are presented; full isolation using virtual machines, namespace isolation using containers and component isolation using a functional package manager. The focus is on introducing the technologies and tools for isolating a development environment using a simple practical example for each approach. The approaches are compared on a high level on few relevant categories which are level of isolation, reproducibility, resource overhead, usability and support and availability. The thesis is concluded with a quick summary and some discussion about choosing between the isolation solutions.