Any contributions must comply with the following OpenSimulator contribution policy, guidelines, and licensing conditions.
In order for your contribution to be accepted you need to read and adhere to the OpenSimulator Code to this policy, guidelines, and licensing conditions.
OpenSimulator Core Values
So, you're thinking of contributing? Great! In order to make your ride as smooth as possible, here's listing some of this projects guiding principles:
This is a young project
This means that we value simple and naive solutions over efficiency - we will optimize but first we need to get the basics right.
This is a 3D application platform, not a Second Life wannabe world simulator
This means that we value decoupling, modularity and indirection over clock cycles and feature completeness.
We are all in this for our own separate reasons, some to have fun, some to make money
This means that any given patch, fix or feature is very much up to whether somebody thinks it fun, worthwile or would pay good money for it.
This is a young project
Many architectural changes have taken place in OpenSimulator's short lifetime, so there are still lots of tangly and bushy remnants of old ways of doing stuff.
This is a noob-friendly project
Yes, believe it or not, we're aiming at continously trying to make the code as simple, structured and readable for newcomers as time and experience will let us.
Sometimes the code is the documentation
We try to make the code as simple, strightforward and readable as possible.
Documentation is good, comments are good
However, sometimes comments are necessary in addition to clear code so that newcomers can learn and maintain the project.
We are a multi-platform project
This means we will go to lengths to avoid bringing in new technologies that would provide thresholds for installing and using the code on different environments. The default configuration should always be build- and runnable on checkout, provided you are on a c# .net/mono environment with either vs build or nant. Other technologies than those can be provided, but will not be guaranteed not to break at any given time.
Codewise, we're trying to move towards looser coupling and better code reuse - and to separate the code into a 'framework' layer, a 'service' layer and an 'application' layer; the framework layer defines all base classes and interfaces, the service layer provide networked and persistent implementations of those, and the application layer provides configuration logic and executables.
Incremental Improvements over Profound Rewriting
"We don't usually do profound refactorings, as it destabilizes the project and the community. We prefer incremental improvements. But profound refactorings have happened before. If you have a concrete refactoring you want to suggest, please do so." (mantis #5512)
Changes which affect existing content must have agreement from the core developers
Wherever possible, we aim to preserve backwards compatibility with existing content, whether that's in the asset database, within inventory archives, etc. The exception is for areas marked as experimental (see below).
If backwards compatibility can't be preserved, then the associated changes must have agreement from all the core developers concerned.
Core functionality must be useful to more than one person/group
Features added to core can't be just for the benefit of one person or group, since they place a maintenance burden on everybody else. Features that are added should have enough documentation to make them useful to other people.
Code added to core can be changed by anybody
Code added to core becomes fair game for other developers to change, to make it more useful to everybody, to improve it, to fix bugs, to eliminate duplication or for any other of the usual open-source reasons.
To make sure that the Overte Foundation (which distributes the OpenSimulator project) can accept your contribution and continue to distribute the OpenSimulator materials under the most free license possible, any contributions to OpenSimulator need to follow the following licensing conditions:
- If you are contributing
- A completely new feature (i.e. not a small amount of code which adds a minor capability to an existing feature).
- Any other change of more than 100 lines of new code.
Then we will need you to submit a completed Contribution Agreement to the Overte foundation. This makes a formal declaration of agreement to the conditions listed on this page. If you have any questions on this please read the FAQ and if this doesn't answer them, post the question to the OpenSimulator developer's mailing list.
The agreement isn't required if the patch is less than 100 lines and does not implement a completely new feature. Bug fixes, implementations of existing LSL functions and implementations of missing parts of existing OpenSimulator features do not count as new features. However, if you're regularly contributing such patches to OpenSimulator then seriously consider submitting an agreement - all core developers and many patch contributors have done so.
The mantis handles of people who have submitted agreements may be posted publicly. However, all other personal information will not be posted.
Intellectual property sublicenses granted under this agreement will be provided to all entities downloading OpenSimulator via the IP Rights Grant.
- Your contribution is either wholly your own, or if it contains third party materials, they are licensed in a manner compatible with the OpenSimulator project. If you rely on third party contributions, acknowledge them and include a copy of the license conditions for those components if they differ from the OpenSimulator project license. We cannot accept virally licensed code unless there is a specific F/OSS exemption for BSD-licensed projects.
- You accept whole liability for any contributions you make for inclusion of third party intellectual property, in the jurisdiction of both yourself, and where the servers are located (United States). If you are unsure about the licensing conditions for a piece of source, do not include it and work around it. If you have a problem here, ask the rest of the developers as they may be able to help.
- If you have any patent claims over your contribution, then you grant the Overte Foundation a perpetual, worldwide, non-exclusive, non-transferable, royalty-free, irrevocable patent license, with the right to sublicense these rights to multiple tiers of sublicensees. If any entity institutes patent litigation against you over that contribution or over OpenSimulator if it includes that contribution then the patent license that you granted to that entity is terminated.
- You have not copied source code from the GPL or LGPL licensed sections of the Second Life viewer to submit your contribution. This includes other viewers (e.g. Hippo Viewer, Imprudence, Firestorm) derived from that codebase.
- You submit your contribution to the repository under the BSD license below.
OpenSimulator BSD License
Copyright (c) Contributors, http://opensimulator.org/ See CONTRIBUTORS.TXT for a full list of copyright holders. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the OpenSimulator Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Instructions on submitting code patches
Please see Submitting code to OpenSim.