\subsection{Enabling novel techniques}
\label{s:usecases}
The \name enables the following use-cases that are not achievable in today's SDN environments:

{\it Enabling Software and Data Diversity in SDNs:} A popular software engineering technique is to have multiple independent teams develop identical versions of the same application. The idea being that most teams will implement the functionality correctly. Thus if all versions are run, the most popular out is the correct output. The \cloner can be used to distribute events to the different versions and to compare output from the different versions.

%{\it Performing Regression Testing:} Similar to software and data diversity, the \cloner can be re-provisioned to run both the current application and a beta-version of the applications. Discrepancies between the outputs can hint at failures in the new version. 

%{\it Application Migration:}

{\it Per Application Resource Limits:} Currently, there is no way to limit the resource consumption of individual controller applications. Consequently, a rouge application can consume all of the server's resources. However with the isolation provided by \name, a network can place limits on the resource consumption of each application, at the process level, further limiting the impact of rouge applications. 


{\it Controller upgrades:} Upgrades to the controller codebase must be followed by a controller reboot. Currently, due to the lack of separation, such events eliminate application state and requires the application to recreate this state. Sadly, some applications may incorrectly recreate this state~\cite{hotswap:hotsdn13}.  Furthermore, the process of state re-creation can result in network outages lasting as long as 10 seconds~\cite{hotswap:hotsdn13}.  Fortunately the application isolation layer proved by \name ensures that a controller reboot does not impact the application or its state. 