Joshua Pearce is a self proclaimed computer geek from eastern Canada, and the lead coder/owner of Silver Sphere Studios, a small game development startup.
Other than that, he doesn't have much to say.
I have written the following C++ libraries which I've found useful, and plan to make free-source as soon as I polish and document them.
For this purpose, I have chosen the Ms-PL license. The non binding summary of this license is as follows. Compiled or linked versions of this code can be distributed without charge in any form, for any use. Distributions of this code in source code form must be done using the Ms-RL license, and no other. In other words, exes/dlls/obj files get MIT style licensing, source code distributions get GPL style licensing, but less contagious. It can be used with GPL/LGPL code, just not distributed under that license. The license is very similar to the CC-SA license, but Creative Commons discourages using that for computer code.
Why not just use GPL or LGPL? I want the code to be as useful as possible to as many people as possible, and that means not restricting it to open source applications, or to open platforms. Why not use MIT? Because I don't want somebody adding a useful feature to it, licensing it under GPL, and thereby forking it into a version which could overshadow the original freesource version. The problem I see with that is that it makes future changes or improvements to that restricted version apply only to the restricted version. This could starve the open version of developers, by encouraging them to work on the restricted version when they otherwise would prefer it to be available to all users.
As a game developer, this is very important to me, especially since I developed these libaries for use in games. Games tend to need to be closed source, for security and to avoid making piracy too easy. Not to mention, developers don't even have a choice about being closed source if they make console games.
Click here For information about my main project, the PlaneD game engine.
- xstring: An object oriented library which handles strings in a way which is compatible with C style strings in every way, as well as working with C++ std::string; On top of that, it's able to parse sscan/sprintf syntax with 100% compatibility, while using templates to detect user error, add new types, and provide complete safety compared to the C style ellipses operator.
- JPlib (working name): This library parses archives, directories, or other arbitrary sources and combines them into a single virtual directory tree especially suitable for use in games.
- SingleToN:A small template which is similar to singletons, but without enforcing global values, or a single instance of the controlled class. Once const Singleton<Foo> foo; is declared in a header or source file, foo behaves as a smart pointer to a Foo class, which will be globally shared. Multiple Foo "singletons" can be declared by using additional template arguments, or you can simply create another Foo anywhere you want and use it. Each instance of the Singleton<Foo> points to the same instance of Foo, and acts as a refcount. The wrapper can use any smart pointer you prefer, as long as it provides a Foo* operator, and an =(Foo*) operator. There is also a stub function to fill in your own threadsafing code, if desired (any mutex or critical section will do).
- PlaneGC: This library contains a base class and manager for reference counted objects, which the manager will clean up as needed periodically. The manager is designed to be run from within a gameloop, and it will only delete objects which have been disused for over 1 cycle. This makes it safe to use "dumb" pointers without incuring any overhead from safety checking constantly, or locking a thread to delete an object.
- JPxml (working name):This library parses and creates XML, ini, plist, and 2 custom formats into the same tree structure. New formats are easy to add, of course. The custom formats already included are .gml, which is a simple markup language "backwards" compatible with xml, but far less strict with syntax, and less bloated. The second is .pdi, which is an uncompressed binary format of gml/xml. pdi files tend to be close to the size of a zipped xml file, and are significantly smaller if also zipped.
- JPlog:A robust and modular logging system. It can use JPlib or xstring, regular file handles, or open a console window in win32 next to your normal application window.
My standard license blurb for open source code:
This library is under the Ms-PL license (see http://www.opensource.org/licenses/ms-pl.html )
In layman's terms, the license is as follows:
-Nobody owes you (the end user) any responsibility or liability for how
well this code works, or for any unintended side effects it has.
-You can use compiled versions of this code (executables or linked libaries
of any sort) for any purpose you wish, and so can anyone else.
-Compiled versions must include the copyright/trademark/attribution notices
from the source code library (if any)
-You are not required to distribute this code with compiled versions, nor
to provide it to anyone.
-If you distribute the code, or altered versions of it, that distributed
code must retain this license (and this notice or one like it).
-You may not take credit for writing the original library, and must give
credit in any source code distributions to the original authors.
In even more layman terms (completely unofficial):
-Source code must always remain completely open source
-Compiled versions are completely free (as in speech and beer)
-The code being open source is not allowed to interfere with the
unrestricted rights for compiled versions.
In even less official terms:
-If you distribute the code, it must remain open and under this license.
This directly makes it incompatible with GPL, but useable by/with GPL.
-Binaries are unrestricted and are released under whatever terms YOU want
Link it statically or dynamically, change it, alter it in any way, etc.
-The license has the trademark "microsoft" in the title, but that's the
limit of their connection. This software has nothing to do with them, they
just wrote that convenient license. This author is aware of the irony.
-Being "incompatible with GPL" doesn't mean it's not open source. GPL is
very restrictive compared to most open source licenses.