VCL 2.3

I. Intro and Description

VCL, Virtual Computing Lab. The VCL can be many things, first and foremost it is
an open-source system used to dynamically provision and broker remote access to
a dedicated compute environment for an end-user. The provisioned computers are
typically housed in a data center and may be physical blade servers, traditional
rack mounted servers, or virtual machines. VCL can also broker access to
standalone machines such as a lab computers on a university campus.

One of the primary goals of VCL is to deliver a dedicated compute environment to
a user for a limited time through a web interface. This compute environment can
range from something as simple as a virtual machine running productivity
software to a machine room blade running high end software (i.e. a CAD, GIS,
statistical package or an Enterprise level application) to a cluster of
interconnected physical (bare metal) compute nodes.

Also using the scheduling API it can be used to automate the provisioning of
servers in a server farm or HPC cluster.

II. VCL Roadmap

VCL 2.3 (this release)
  * Service deployments
  * Allow for additional connect methods for environments (port, other
    protocols, etc)
  * Added framework support for libvirt 
  * Added support for KVM
  * Added support for OS X under ESX
  * Added support for VMware VCenter
  * Added multilingualization to frontend

VCL 2.4
  * Improve additional connect methods
  * NAT support
  * Remove requirement for 2 NICs
  * Support for Spice remote display protocol
  * Scripted installation
  * Support for ESX OS for end users
  * Initial support for EC2 API and OpenStack

VCL 2.5
  * Power management
  * Improve cluster reservations
  * Service deployment configuration management
  * Initial support for Libcloud

VCL 2.6
  * develop tools for managing both system and user storage

With each release, we'll be working toward making VCL easier to install. As
part of our move to development at the Apache Software Foundation, it is an
obvious goal to create a community of users and more developers around VCL.
Bringing in more developers should become easier as VCL becomes easier to
install.

III. Getting Involved in the ASF VCL Community

There are five ways to become involved in the ASF VCL community.

* Join the mailing lists and participate in discussion
  There are two mailing lists: user@vcl.apache.org and dev@vcl.apache.org.
  To join user, send an empty message to user-subscribe@vcl.apache.org.
  To join dev, send an empty message to dev-subscribe@vcl.apache.org.

* Submit bug reports and feature requests to our JIRA bug tracking system.
  See section IV below for more information on doing this.

* Create documentation on our Confluence site. Create an account at
  http://cwiki.apache.org/confluence/display/VCL/Index and just start adding
  content. (Note to current community: We should create a page explaining
  the layout so new people will know where to add content better.)

* Submit patches through the dev mailing list and via the JIRA bug
  tracking system. Once you have become familiar with VCL, you can begin
  assisting with the development of it by picking a JIRA issue to fix or by
  adding a feature needed at your site. Then, contribute a patch of your
  changes through the JIRA tracking system and send a message to the dev
  list explaining what you have done.

* Become an official committer to the project. Once you have shown that you have
  a good grasp of the project by submitting patches, you can further join the
  development work by submitting a contributor license agreement (CLA) to ASF
  and having a committer account created to directly contribute code to the
  project.

* If you are interested in contributing something to the project, please discuss
  it on the dev list BEFORE starting work on it. This allows the community
  to be involved in decisions and allows current developers to provide some
  guidance.

IV. How to Submit Bugs and Feature Requests

If you find a bug, please submit a bug report to our JIRA bug tracking system at
http://issues.apache.org/jira/browse/VCL (you will need to set up an account
there if you haven't already done so - it's free to anyone). Also, we would
appreciate it if you mentioned that you filed a bug on the dev list to make
sure we don't miss it.

If you would like to requrest a new feature, you can also submit that in the
same way through JIRA (just select "New Feature" or "Improvement" as the Issue
Type). Again, it would be helpful if you mentioned that you filed a feature
request on the dev list.

After you have created a JIRA issue, you have the option to vote on it to help
us know how to prioritize issues. You can also "watch" the issue to see when
activity related to it is submitted.
