Terms of Use

By ‘derivative work‘ we understand it as defined by the US copyright law. We emphasise the following passage from the copyright act of the USA

“Making minor changes or additions of little substance to a preexisting work will not qualify the work as a new version for copyright purposes.”

By ‘copyright holder‘ we understand Dr Mark Tarver, or, in the event of his decease, the committee appointed under the terms of his will to administer his intellectual estate.

By ‘the software‘ we understand Shen and all the code used to implement it. We include both the original source code written in Shen, and the code derived from this code through compilation to other languages.

By ‘Shen standard‘ we understand the latest standards for Shen laid down by the copyright holder.

By ‘the user‘ we understand any person or group of persons, whether organised in a commercial company, cooperative or institution or not, that use the software. The use of ‘he’ and ‘his’ to refer to the user follows English usage, but makes no special assumptions about gender or plurality.

The License

The user is free to produce commercial applications with the software, to distribute these applications in source or binary form, and to charge monies for them as he sees fit and in concordance with the laws of the land subject to the following license.

  1. The license applies to all the software and all derived software and must appear on such.
  2. It is illegal to distribute the software without this license attached to it and use of the software implies agreement with the license as such. It is illegal for anyone who is not the copyright holder to tamper with or change the license.
  3. Neither the names of the copyright holder or of any of the web sites administered by him may be used to endorse or promote products built using the software without specific prior written permission from the copyright holder.
  4. That possession of this license does not confer on the copyright holder any special contractual obligation towards the user. That in no event shall the copyright holder 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) arising in any way out of the use of the software, even if advised of the possibility of such damage.
  5. It is permitted for the user to change the software, for the purpose of improving performance, correcting an error, or porting to a new platform, and distribute the modified version of Shen (hereafter the modified version) provided the resulting program conforms in all respects to the Shen standard and is issued under that title. The user must make it clear with his distribution that he/she is the author of the changes and what these changes are and why.
  6. Derived versions of this software in whatever form are subject to the same restrictions. In particular it is not permitted to make derived copies of this software which do not conform to the Shen standard or appear under a different title.
  7. It is permitted to distribute versions of Shen which incorporate libraries, graphics or other facilities which are not part of the Shen standard.

The License in Detail

The user is free to produce commercial applications with the software, to distribute these applications in source or binary form, and to charge monies for them as he sees fit and in concordance with the laws of the land subject to the following license.

That’s the $free part. You can write your own Shen software and put your own license on it and charge what you want and distribute it either as closed or open source. We’ll come back to that.

  1. The license applies to all the software and all derived software and must appear on that software.

    That means that the license applies to the Shen source code and the Kλ source code which comes with the download. You will see that this code carries a copyright on the code. The concept of derivative is explained in US law as follows.

    A “derivative work” is a work based upon one or more pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which a work may be recast, transformed, or adapted. A work consisting of editorial revisions, annotations, elaborations, or other modifications which, as a whole, represent an original work of authorship, is a “derivative work”.

    To this we add that any computable mapping of the Shen source code and the Kλ source code to another medium i.e. another language; counts as a derivative work in our understanding, and it is immaterial whether this mapping is done by a human being or by a computer. If you map Shen into Javascript by writing a compiler, then the resulting Javascript program carries the same license as the original and that license must appear on the code. If you retitle some of the functions using a global substitution it is a derivative work. If you copy it out in copperplate using a quill, it is derivative. In other words, the message and not the medium is important.

  2. It is illegal to distribute the software without this license attached to it and use of the software implies agreement with the license as such. It is illegal for anyone who is not the copyright holder to tamper with or change the license.

    This is basic. You cannot remove this license or change it - only the copyright holder can do that.

  3. Neither names of the copyright holder or of any of the web sites administered by him may be used to endorse or promote products built using the software without specific prior written permission from the copyright holder.

    You cannot say ‘My software is great because Mark Tarver recommends it’ or ‘Lambda Associates says this is really reliable’ unless we did actually say that, and gave you the written permission to use our endorsement. That said, if you do write something really great in Shen, I’d be happy to endorse it and for you to use that endorsement.

  4. That possession of this license does not confer on the copyright holder any special contractual obligation towards the user. That in no event shall the copyright holder 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) arising in any way out of the use of the software, even if advised of the possibility of such damage.

    This is the usual disclaimer. It protects us from a lawsuit in case anything goes wrong with our software. However Shen is based on a design with 20 years R&D; it has been very thoroughly tested by myself and by the people who have ported it to other platforms. So in all you are pretty safe here.

  5. It is permitted for the user to change the software, for the purpose of improving performance, correcting an error, or porting to a new platform, and distribute the modified version of Shen (hereafter the modified version) provided the resulting program conforms in all respects to the Shen standard and is issued under that title and the original license. The user must it clear with his distribution that he/she is the author of the changes and what these changes are and why.

    Shen sources are readable for several reasons. The first is that we want to allow people to read our code and correct mistakes. The second is that people porting Shen to different OSes and different platforms need open access to the code to do the porting. The last is we allow people to improve the efficiency of our code by changing it - as long as it then still works i.e. it conforms to the spec. You have to put your name on the changes you make, because, in the event that something goes wrong, we cannot take the moral responsibility for those changes. It should be obvious (I hope) that optimising a small piece of code does not change the license or allow you to change the license. The resulting work is still derivative.

  6. Derived versions of this software in whatever form are subject to the same restrictions. In particular it is not permitted to make derived copies of this software which do not conform to the Shen standard or appear under a different title.

    Again this emphasises what we said in explicating 1. This point just says you cannot evade the license by simply retitling and reselling our code under a different title e.g. Shine.

  7. It is permitted to distribute versions of Shen which incorporate libraries, graphics or other facilities which are not part of the Shen standard.

    This means you are free to add things to Shen which are not part of the standard and you can distribute that work under the Shen title.

The Motivation for Shen and the License

Now let’s look at the motivation for this license. The motivation for the license is the motivation for Shen itself; we set ourselves a goal and achieved it; we produced a version of Qi which runs uniformly according to specification, not just under Common Lisp, but under Scheme and Javascript (and to come Clojure, Python, ...etc). How did we do this?

First, we did it by reducing the instruction set necessary to run Shen to an absolute minimum, currently (August, 2013), 46 primitive functions. Second we maintain a rigorous testing and specification for the work we produce and we make sure that, under whatever the platform Shen appears, Shen runs out of the box on that platform, according to spec, without exception. The motto for Shen is:

“Write once, run anywhere.”

That means that the professional programmer can rely on Shen to work for him and he can write a Shen program once and move it to CL, Javascript etc, and (modulo performance) expect it to work. This is very important.

Part of our motivation in maintaining a tight spec and a reliable platform is to hold the Shen community together so that we do not splinter our resources on multiple incompatible forks. We do not want multiple incompatible dialects of Shen, multiple compilers, multiple incompatible libraries. We want $free readable libraries that work for all of us and libraries we can pick up and use without worrying about compatibility. Hence the production of derivative non-conforming programs from our source, whether called Shen, Shin, Shine or Shoo, is barred by the license. To give up on this is to give up on the motivation for Shen.

We are therefore not open source. Generally, the diversity and freedom to fork which was lauded as a strength of open source, has turned into the major weakness of Linux. This OS has been burdened by multiple forks, multiple distros, multiple apps for doing the same thing to the point where essentially the same work has been redone over and over again by different groups. The resultant wastage of effort has been huge and the result has been lack of cross platform usability, a lack of uniformity in the user interface, a reliance on complex dependencies and too often, software that reflects the scattering of human resources by displaying broken functionality. Even Linux fans are seeing this. This in turn has given Linux a bad name. We want to avoid all that.

The analogy that we would like people to carry with them is that of a spinning wheel. The freedom of the wheel to spin depends on there being a fixed hub which at its theoretical geometrical centre point shows zero motion. Our adherence to standards and discipline as system programmers allows you, the applications programmer, to be confident of basing your work on ours.

Some Questions

There are probably more questions than we can anticipate; hence this list will grow as people ask them. Here are a few obvious ones.

  1. Is Shen subject to something like GPL? For instance, if I distribute Shen source with my application, do I have to make my code readable or $free?

    No, any code you write using Shen is your code. If it is really an application running on top of our code and not a derivative of our code, then you can do what you want with it. We do not covet your work.

  2. Suppose I write a compiler for Shen in C and I want to sell it as closed source. Can I? Even if I use your code?

    Yes; there is nothing to stop you writing a superfast compiler for Shen and selling it to people. As long as it meets the language specification, we really don’t mind

  3. Suppose I move Shen to another platform and make an error, breaking the spec, what happens?

    Generally you would want to avoid breaking the spec, but supposing that you did, you would first have to issue an announcement to your users explaining there was a bug. Second, you would have to fix it. If you could not fix it, you would have to withdraw it.

  4. Suppose I wanted to distribute some enhanced version of Shen e.g. with a graphics tool or special editor. Would my work be bound by the Shen license?

    Again the code you write which rides on the top of our code is not bound by our license, this is yours. And there is nothing to say that you cannot add extra features, bells and whistles, to your version of Shen; but what you cannot do is add a feature than causes Shen to fail to execute according to spec. And you cannot simply get round this by retitling the resultant implementation by another name.

  5. Can I change Shen source and sell it as closed source?

    Yes; it’s probably not a very sound business proposition because we keep our sources readable. But you could do that provided the result still ran according to spec under the same name.

  6. Can I sell support and services to Shen?

    Of course.

  7. Will the library appear under the same license that Shen uses?

    No; we are pretty much laissez faire with respect to applications written in Shen. We don’t insist on any license restrictions on what appears in the library. However if you want to make a for-money closed source contribution to the library and you wanted us to mount it on our website, you would have to negotiate a fee for us giving it space and advertising. If you wanted to make it open source, under BSD or MIT for instance, then we’d certainly put it up - no fee. Generally we are into open source for the library, because the motivation for constraint is less than for the kernel on which everything depends and we want people to be able to use this stuff freely. We are into experimentation at this level.

  8. Will the standard for Shen remain the same?

    No language standard remains static, but the Shen kernel is now very slow growing - deliberately. We are mainly into tracking down every last bug.

    However there is active interest in concurrency for Shen, FFI, connection to the OS, graphics etc. These are completely open to almost any interpretation and any license. You can join our group and contribute if you wish.

  9. So does this mean that I could write a program in Shen in 2013 and find it does not work in 2015?

    Almost certainly not. We don’t intend to remove or change what we have already done. Changes will be incremental - aimed at increasing the power of the language, giving users the ability to do new things, not taking away their ability to do old things.

  10. If I produced my version of Shen, and it conformed to your standard in 2013 and then you added a new feature, would I be required to update my implementation?

    You are not compelled; but note that we always make our code readable and documented, we support our system programmers, and we are conservative in making changes; for one thing, we don't want to make work for ourselves and our colleagues.

    Generally the sources on the Download page on the Shen site are kept up to date as possible. If for some reason, somebody fell behind updating, we would hope that they would pass on the job to a successor who would.

  11. Suppose I created a plugin for Shen which was really cool e.g. a feature for enabling concurrency. Suppose you changed the standard for Shen to include a version of concurrency that made my work contravene the new standard. What would happen?

    We cannot do that. We cannot make a feature created by somebody retrospectively illegal by changing the standard in such a way that that feature is out of bounds. What we would do in that event, is make sure that our version of concurrency was invoked in such way as not to be inconsistent with the existence of your version under Shen. This is simple to do e.g. use different identifiers. Of course, if your feature was that cool you might want to offer it as part of the new standard. But that would be your choice.

  12. Suppose I build an application using Shen and want to borrow fragments of Shen code to run it as a stand alone application. Can I do it? How does the Shen license apply to this code?

    Yes, you can. you are free to borrow as much code as you want and even change it provided the code you borrow continues to work as it should in the context of the Shen spec.

    Generally there is very little point in producing a working Shen program and then changing the supporting system code that ensures that it works.

    If you look at the Shen distribution you will find that Shen is broken into various files for the reader, the writer, the compiler etc. and that they all carry the Shen license even though they are fragments.

    What this means is that the union of these files constitutes a Shen system. It would be illegal to change one of these fragments if the whole would then fail to meet the spec. This is true irrespective of the size of these fragments and this constitutes the answer as to what the Shen license means as applied to a code fragment. It means you are free to use it as you want as long as the license is still attached to the source and it continues to meet the functionality required of it. You can compile it and embed it in an executable, sell it etc.

    This is an important point - otherwise one could simply split the Shen source into 500 files and remove the license from each and assemble to whole back into an unlicensed version. If you want to compile these Shen files to binary (.fasl in the CLisp version) then you should attach the license as a text file with your distribution saying that the binary is taken from Shen sources and is bound by the Shen license. If you want to distribute your work as an executable, with Shen source within it, then you should include some text file with your distribution saying that the Shen components that are included in your work, work according to the Shen license. There is a system we are building called the Ring which will do all this for you automatically.

  13. Can I mix Shen code with code from other licenses?

    You have to recognise that you cannot remove any license off a file (not even MIT/BSD) and replace it with another (that's part of the meaning of a license). If you borrow some of our code, you need to make sure the license stays on top. However as long as you keep our sources separate from the other code you are handling and do not multilate the sources so that they no longer work, you are free to use them or compile them in conjunction with whatever code you like. 'No longer work' means that if returned to the system from which they were taken, they would cause the system to fail the Shen spec.

    Watch out for GPL however because this is not a tolerant license (see below).

  14. If I am porting Shen, do I have to place the Shen license on all the code I write?

    'All the code' meaning 'the code you write to port Shen'. Not all of it. Generally a porter writes two files by hand - a primitives file and a file called the backend which compiles an internal language called KLambda to Shen. Since these files are written by hand, and not derived from Shen files, you do not have to put the Shen license on them. However the files that are computably extracted from KLambda are Shen licensed. What this means is these files cannot be changed if the change causes them to fail to work in the context of the port.

  15. Is it a good idea to hack the kernel?

    Not if you are wanting to produce a working standalone Shen application. This would be rather like writing a C program and hacking the C compiler than runs it. This requires a deep knowledge. The accuracy of the kernel actually guarantees that your program will behave correctly. If you want to do this kind of work, you should join the development group. Mainly though the exciting stuff is more concerned with extensions (i.e. concurrency) to Shen.

  16. How does the Shen license compare to GPL?

    People sometimes talk about GPL software as 'free software'. GPL software is not free because it places restrictions on what you can do with the code. These restrictions are actually quite severe and prevent you from embedding GPL code in any closed source application. This in turn makes it harder to use the software commercially. Shen does not do that - you can embed our code within a closed source application. GPLed code is neither more nor less free than Shen licensed code; the difference lies in where the conditions arise. Shen simply insists that you are free to tinker only if you are prepared to accept responsibility for making sure that what you change still works. This actually only affects a very few programmers who have the knowledge and motivation to hack the kernel. The GPL license however would affect every applications programmer who tried to use our work. So in that sense, the Shen license is more free than the GPL.

  17. Can I use the GPL license with Shen?

    As far as we understand it, there is nothing to stop you writing a Shen application and putting the GPL on it. Since this runs on top of Shen, it does not affect the Shen license because your GPLed code is reliant on our code and not vice versa. However you cannot relicense any part of the Shen kernel to the GPL or any code that the kernel uses and if you want to build a kernel with Shen source, you cannot use GPL. This is because the GPL is restrictive. Our kernels are built from a mixture of BSD/MIT code and Shen licensed code.

  18. Alright, suppose I do borrow your code from the download and you change the specification. Does the kernel code I have borrowed become illegal?

    No; because it was legal at the time we distributed it. We cannot make our code **retrospectively** illegal. So you are free to distribute our code and even change it within the parameters of the latest specification. However our kernel code is fairly static and the best and easiest way to get hold of any changes you need is to download them. If you find a fault in the kernel then reporting it back to us is the most constructive way of helping. Generally any bug is fixed in 48 hours.

  19. Just suppose I wanted to build a Shen kernel using the Shen sources? What are the license restrictions?

    If you want to do this kind of work seriously you need to first see if this has already been done. Mostly by 2014 all the major platforms will be covered. Supposing there is a gap, you should join the development group.

    You need to decide whether your kernel is open or proprietary. Shen was designed to be portable. If you look at the innards of a Shen port you will find the files partition as follows.

    A. There are a bunch of native code files derived from the Shen licensed KLambda .kl files downloaded from the Shen website.

    B. There is a compiler, called the backend, that compiled those native files from the .kl files.

    C. There is a primitives program, which encodes the KLambda primitives in native code.

    D. There is ancillary documentation and installation instructions etc.

    Regarding A., these files should be under the Shen license because they are derivative work. I'll explain.

    If I buy the works of Steven King I cannot transfer copyright to me by putting them through a scanner into e-format since I am not the intellectual author of the work. A scanner requires zero intelligence. Even if I built and designed the scanner myself, this would still be true - although of course I could copyright the scanner because I designed and made it.

    For similar reasons, if say, a C program is copyrighted and I pass it through a C compiler to get an object file, the object file is subject to the same copyright. A compiler is not more intelligent than a scanner, and transferring the same ideas to a different medium by pressing a button requires no intelligence and is not authorship. If I actually built the compiler, again, I could copyright it.

    So the files in A. are bound by the Shen license which gives you the power of copy. As regards B-D, these are produced by the person who ported Shen and here the license and copyright are with him/her. There is a choice here. GPL is not one of them because this is inconsistent with the Shen licensed native code files which use them to run on that platform - you cannot GPL Shen. But beyond that there is a choice and the one we support is BSD/MIT/Shen. All the platforms offered on the download page should be conformant to that licensing and that enables you to work freely without worrying about copyright. A platform that did not do that would really be proprietary.

  20. I notice the copyright holder and designer is Mark Tarver. What happens to the project if something happens to him?

    There is an advisory committee - the 2011 committe - on the development of Shen. All changes to the spec are discussed within the committee. Though Mark Tarver occupies the position of BDFL, the consensus of the committe is really needed to make any fundamental change in the spec. Should something happen to Mark - death or incapacity; then executive decision and copyright will pass to the committee which will collectively assume the position of BDFL.

  21. Could you tell me more about the committee?

    The committee is composed of people with technical knowledge that is useful to the development of Shen and people who have made a significant technical contribution - mainly moving the kernel to another platform or developing some significant systems application. They are selected by Mark Tarver on this basis and are there to give advice. But in the event that Mark is dead or incapacitated, they will elect people and make decisions based on majority voting with the chairman having the casting vote. The committee was formed in 2011.

  22. Will Shen always be $free and readable?

    Yes. We maintain a policy of keeping our sources readable for all our platforms. One reason for this is that we want to encourage people to write applications in Shen that can be migrated freely to many languages. In order to do that, people need to draw upon our sources.

  23. Could you summarise the whole idea of the license in one sentence?

    Sure

“Thou shalt not break the spec”