Ready, Steady, Vir…Go!

onYourMarksSeveral months ago I took over the project lead for Virgo. The project code base and vision had been established by SpringSource dm Server[1] and later on by VMware[2] and SAP[3]. After an assessment of what Virgo can do today and where we see a future for Virgo in the application server market, we want to share our vision for the future of Virgo with you – our collaborators, adopters and users.

Where we are today

As of today, you are able to scale up and scale out easily with Virgo. You can run OSGi applications with Virgo on a Raspberry Pi[4] or a large Amazon node. With lightweight container technology like Docker, you can easily automate the installation of Virgo[5] and support continuous deployment[6].
This enables you to scale out with a modern cloud-independent technology.

Still it could be easier to develop, deploy and monitor Virgo-based applications.

Our vision

Our vision is that Virgo becomes the leanest and easiest-to-use server for modular applications. We will achieve this by focusing on single application installations per server. Server and application become an atomic deployment unit. Virgo will continue to expose OSGi to the application and make it easy to blend the server into a standalone application. You can benefit from the powerful service-oriented programming model of OSGi to leverage loosely coupled modular application with reusable components. You can easily ship your application and the extensible server in a single step without having to create a war artifact. During development it will be very easy to test-drive and debug the single deliverable with a live command shell, e.g. in the same lightweight container that is used in production.

For the past two decades, application servers have been designed to handle deployment of multiple applications, update of applications and shared-anything deployment scenarios. Virgo has been no exception, it implements shielding of entire OSGi environments in one application server instance. But the world is moving on to new deployment standards. With virtualization and lightweight containers it has become feasible to make deployments immutable. If you want to change anything, you make a new deployment next to the existing one. Application deployments get managed from the outside, not within an application server any more.

Deploying applications in an immutable style has become the de facto standard of the internet industry. Application servers today have not been designed for this purpose. But for Virgo and the existing Virgo Nano deliverable, it is a relatively small step getting there.

To implement our vision, we will provide a streamlined Virgo distribution build on top of Virgo Nano. The main focus is running HTTP based modular apps on environments ranging from small devices to cloud farms.

What does that mean?

In the new development stream we will introduce Virgo Nano Jetty and Virgo Nano Tomcat as the main deliverables. Based on this HTTP ready package, we want to make it easy to add more modules to the mix. Either during the packaging process (e.g. a Maven Mojo) of your application, or via scriptable Virgo and the possibility to export a self contained, easily customizable deployment unit:

$ bin/virgobuild.sh add my-application.plan
$ bin/virgobuild.sh add customer-A-specific-addons.plan

$ bin/virgobuild.sh configure user admin/s3cr3t
$ bin/virgobuild.sh configure httpPort 80

$ bin/virgobuild.sh package my-application-with-customer-A-specific-addons.zip

We intend to provide tooling for the new flavour and add Docker support to the Virgo Tooling to make it easy to run and test your application in virtualized environments.

We’d like to hear your feedback so please comment on these ideas and let’s carve out the details together.

[1] https://spring.io/blog/2008/09/11/springsource-dm-server-1-0-rc2-released
[2] https://underlap.blogspot.de/2012/10/virgo-in-vsphere.html
[3] https://www.infoq.com/news/2012/12/sap-netweaver-cloud
[4] https://eclipsesource.com/blogs/2014/02/18/a-lightweight-java-application-server-on-raspberry-pi/
[5] https://eclipsesource.com/blogs/2013/07/03/automated-installation-of-virgo-with-docker/
[6] https://eclipsesource.com/blogs/2013/10/25/continuous-deployment-with-docker-and-virgo/