Skip to content

History

Mike Dickson edited this page Feb 26, 2024 · 3 revisions

NGC Tranquillity was started for 2 purposes. Firstly to share the work I had put in on my own grid software (for Utopia Skye Grid) and do it in a way that tracked Core but added additional work to insure quality and performance. My intention was to track Core but add in some additional things where we could make improvements, making those changes available upstream as well.

Secondly OpenSim NGC was to be the technical basis for the work we were doing on the Trusted HyperGrid. Anytime you open a port to the internet for a networked services like OpenSimimulator is there are a host of issues that come along with it. Personally I feel that Core has largely kicked that can down the road and so I wanted to provide a more secure platform. Also since OpenSimulator is providing asset storage for artistic content for the grid its serving its important that IP laws are both observed and supported via the software. Not only is this not the case for Core software but I personally feel that development on Core has helped to cultivate a culture where IP theft and IP rights are frequently violated. I wanted to do better.

I first spoke publicly about NGC and the Trusted Grid at OSCON 2022. The response was all over the map. Some people loved it, others felt it was just divisive and the work should be done in Core. Again remember that NGC up until recently (end of 2023) was mostly Core with the extra testing and curation. I can also say that attempts were made to collaborate without any kind of serious success. I have a long history with OpenSimulator going back to early days at InWorldz LLC and the lack of collaboration has been consistent since then. I know others have had similar experiences.

I guess I think its important to say that if you use NGC software the Trusted Grid philosophy comes with it. For the next major release in 2024 I will almost certainly add a license for the software that indemnifies the developers of any illegal/improper use and says that you understand that the IP stored in the system comes with a legal responsibility to protect it. That you wont do anything to subvert that right with the software. That would include things like enabling god mode, providing OARs or IARs that are unfiltered, etc.

Up through the December 2023 release we've largely worked on these goals: curated Core and added in a few features that increase performance and compatibility with SL (which should be considered a sub-goal of the project). Examples of the changes include the switch to the Pomelo MySQL connector and a fully implemented and tested SL compatible LinkSetData implementation. In both cases Core was made aware of these changes and chose not to use them.

Current Plan

As of mid last year (2023) Core started work on a "port" of OpenSim to dotnet core (v6 which was the LTS release at that time). They released 0.9.2 which is incorporated in the NGC December release, which also includes the LinkSetData changes. Some time after releasing 0.9.2 Core merged the branch they were using for dotnet core work and renamed it 0.9.3. Again the last full release core made is still 0.9.2 (mono). The dotnet core version (0.9.3) is considered in development. NGC makes more frequent releases than Core and December is based on 0.9.2 plus our local changes. The current active release is always available on master and there are links to download the release on Github.

I started dotnet core experiments in early 2023. It became quickly apparent that OpenSimulator is using a number of now deprecated functions and the underlying architecture is antithetical to the architecture provided in dotnet core. Basically the Robust container is largely incompatible with normal dotnet core architecture. Similarly the plugin model used in the region code is similarly problematic.

Core has made the decision to take the existing OpenSimulator architecture as it is and make it "work" in dotnet core. Doing so requires working around a number of deprecated functions and patching libraries with inconsistent versions in order to get the code to build and run. The entire approach is antithetical to our goals for NGC. It decreases code security and increases fragility, Whats needed (and Core has agreed with this at developers meetings but said that its too big a job to tackle) is an actual port of the code base onto the major dotnet core frameworks and patterns that are available. Taking such an approach increases code reliability and security. As of last check compiling OpenSimulator Core with dotnet 6 produces over 500 warnings that have largely been disabled and/or ignored. Some of the warnings are directly about security issues and nothing has been done to address these things. Clearly this inst the NGC way and not something I plan on running on my grid.

So starting last November I began a real port of OpenSimulator to the dotnet 6+ architecture (current code is targeting dotnet 8 LTS). This implies using the standard Logging and Configuration extensions as well as the standard Hosting container including using DI for identifying and loading "Services". The end result is more testable code (test cases are supported in NGC as well. They don't work on Core 0.9.3), that cleanly interacts with its environment. Current goal is to get Robust services ported over and working with an NGC Region server from December. That will illustrate protocol and data compatibility. Finally the region service will be ported and all of NGC will be hosted on dotnet core (v8 is the target). At this point I'm testing the region services and finishing coding there. I'll use a beta grid to test the changes in full grid mode.

Our next full release will be based on this work. If something pressing requires an update of the December Mono release (most likely candidate is PBR Materials) then I can always back port that to Mono, But I don't expect a problem there and the current December release remains available and works well.

Clone this wiki locally