+\section{Overview \& Terminology}
+The goal of the architecture is to facilitate an ecosystem in which an
+\gls{iTasks}-system can add, change and remove devices at runtime. Moreover,
+the \gls{iTasks}-system can send \glspl{mTask}, compiled at runtime to
+bytecode, to the device. The device runs an interpreter which can execute the
+\gls{Task}'s bytecode. Devices are persistent during reboots of the
+\gls{iTasks}-system. The methods of interacting with \glspl{mTask} is analogous
+to interacting with \gls{iTasks}-\glspl{Task} and programmers can access the
+\glspl{SDS} made for a device in the same way as a regular \glspl{SDS}. The
+following terms will be used throughout the architecture description.
+
+\begin{itemize}
+ \item Device, Client
+
+ This is the actual device connected to the system. This can be a real
+ device such as a microcontroller but also just a program on the same
+ machine as the server.
+ \item Server, \gls{iTasks}-System
+
+ The actual executable serving the \gls{iTasks} interfaces. The system
+ will contain \glspl{Task} taking care of the communication with the
+ clients.
+ \item System
+
+ The complete ecosystem, thus containing both the server and client
+ programs.
+ \item Engine
+
+ The runtime system of the client. This system handles the communication
+ with the server and interprets the \glspl{Task}.
+\end{itemize}
+
+
+\section{Devices}
+The engine for the devices is compiled from one codebase. For a device to