Background

Software Deployment

Distributing complex pieces of software can be tedious at best, and complicated at worst.
There have been many solutions developed to make this process easier, but none are perfect.
Many are hard to use, or lack the performance to make it worth it in the first place.

The Madeus Model

The Madeus model is a theoretical, formal component-based deployment model for distributed
software designed by Inria, the French national research institution on computer science.
Madeus accurately describes the life cycle of each component by a structure close to a Petri net, and finely
expresses the dependencies between components, which enables users to orchestrate deployment actions in parallel.

MAD

The Madeus Application Deployer (MAD) is a Python implementation of the Madeus model.
Its goal is to efficiently and easily define the low-level deployment steps involved in a given piece of software.
MAD is low-level but offers a highly generic deployment model.
MAD allows users to tap into the power of the Madeus model.



Our Project

Role

MAD can be difficult to use, however. Software deployment can be a complex subject, and those unfamiliar with the it,
the Madeus model, or technical topics in general, may struggle to get MAD going - even with extensive documentation and examples.
This is no flaw in design, but rather a matter of accessibility. That's where Team Amadeus comes in - we are to give MAD a frontend
that makes it easier to use for those interested.

Solution

Our solution is a highly-usable GUI that enables users to utilize the Madeus model via MAD.
This GUI will help increase usability by allowing what would usually be done programmatically to be done graphically instead.
By providing clear visualizations, allowing drag-and-drop assembly building, plug-in support, and MAD code generation,
we hope to give MAD a new look, and users a sigh a relief.

Schedule

After outlining specific functionalities needed for the GUI to be considered "usable", analyzing technical requirements,
and determining the feasibility of what we will be striving towards, we'll begin researching potential tools and frameworks to use
that could address the problems we outlined. After that, we'll begin drafting a more specific design, considering how all of the
various parts work together to overcome our problems. Finally, we will begin implementation, iterating through these steps against as
we get deeper and deeper into development.