Skip to content

Commit

Permalink
Commercial licensing option for Lux + release versions for sub-projects.
Browse files Browse the repository at this point in the history
  • Loading branch information
eduardoejp committed Oct 1, 2021
1 parent 8196ab3 commit 6283562
Show file tree
Hide file tree
Showing 26 changed files with 145 additions and 89 deletions.
63 changes: 63 additions & 0 deletions PATRON_LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Patron License

Payment Platforms:

* https://www.patreon.com/lux_programming_language

Participating Contributors:

* Eduardo Julian - https://github.com/eduardoejp

## Purpose

This license gives everyone patronizing contributors to this software permission to ignore any noncommercial or copyleft rules of its free public license, while continuing to protect contributors from liability.

## Acceptance

In order to agree to these terms and receive a license, you must qualify under [Patrons](#patrons). The rules of these terms are both obligations under your agreement and conditions to your license. That agreement and your license continue only while you qualify as a patron. You must not do anything with this software that triggers a rule that you cannot or will not follow.

## Patrons

To accept these terms, you must be enrolled to make regular payments through any of the payment platforms pages listed above, in amounts qualifying you for a tier that includes a "patron license" or otherwise identifies a license under these terms as a reward.

## Scope

Except under [Seat](#seat) and [Applications](#applications), you may not sublicense or transfer any agreement or license under these terms to anyone else.

## Seat

If a legal entity, rather than an individual, accepts these terms, the entity may sublicense one individual employee or independent contractor at any given time. If the employee or contractor breaks any rule of these terms, the entity will stand directly responsible.

## Applications

If you combine this software with other software in a larger application, you may sublicense this software as part of your larger application, and allow further sublicensing in turn, under these rules:

1. Your larger application must have significant additional content or functionality beyond that of this software, and end users must license your larger application primarily for that added content or functionality.

2. You may not sublicense anyone to break any rule of the public license for this software for any changes of their own or any software besides your larger application.

3. You may build, and sublicense for, as many larger applications as you like.

## Copyright

Each contributor licenses you to do everything with this software that would otherwise infringe that contributor's copyright in it.

## Notices

You must ensure that everyone who gets a copy of any part of this software from you, with or without changes, also gets the texts of both this license and the free public license for this software.

## Excuse

If anyone notifies you in writing that you have not complied with [Notices](#notices), you can keep your agreement and your license by taking all practical steps to comply within 30 days after the notice. If you do not do so, your agreement under these terms ends immediately, and your license ends with it.

## Patent

Each contributor licenses you to do everything with this software that would otherwise infringe any patent claims they can license or become able to license.

## Reliability

No contributor can revoke this license, but your license may end if you break any rule of these terms.

## No Liability

***As far as the law allows, this software comes as is, without any warranty or condition, and no contributor will be liable to anyone for any damages related to this software or this license, under any kind of legal claim.***
72 changes: 28 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,30 @@

Lux is a new programming language in the making.

It's meant to be a functional, statically-typed Lisp that will run on several platforms, such as the Java Virtual Machine and JavaScript interpreters.
It's meant to be a functional, statically-typed Lisp that will run on several platforms, such as the Java Virtual Machine and JavaScript, Python, Lua, or Ruby interpreters.

### What's the current version?

0.5.0
0.6.0

### How far ahead is the project?

Lux is in the **beta** stage.

The JVM compiler is pretty stable and the standard library has grown to a respectable size.

Also, new experimental support for Android has been added.

### How can I use it?

You should use the Leiningen plugin for Lux to compile your programs and manage your dependencies.

You can find it here: https://github.com/LuxLang/lux/tree/master/lux-lein

After compiling your program, this will generate a directory named "target" and put all the .class files there.

Then, you can run the program like this:

java -jar target/jvm/program.jar

### Sample

To take a look at sample Lux projects, check these repositories:

* https://github.com/LuxLang/tutorial1
* https://github.com/LuxLang/lux/tree/master/luxdoc

The `luxdoc` program was actually used to generate the documentation for the standard library (located here: https://luxlang.github.io/lux/)
Also, new experimental support for JavaScript, Python, Lua, and Ruby has been added.

### What's the license?

[Custom License](license.txt)

Read carefully before using this project, as the license disallows commercial use, and has other conditions which may be undesirable for some.

However, commercial use is allowed for patrons under the terms of the [Patron License](PATRON_LICENSE.md).

You can become a patron by supporting Lux through [Patreon](https://www.patreon.com/lux_programming_language).

## What's interesting about the language?

### Inspirations
Expand Down Expand Up @@ -83,7 +66,7 @@ Additionally, by hosting the module system on top of records, which are regular

You can also write functions that take and return structures (as _functors_ do in ML), and you can generate structures on the fly.

> Also, Lux now offers a mechanism for easy polymorphism, just like Haskell's type-classes, but built upon it's module system, thanks to the `lux/type/auto` module and its `:::` macro.
> Also, Lux now offers a mechanism for easy polymorphism, just like Haskell's type-classes, but built upon it's module system, thanks to the `library/lux/type/auto` module and its `##` macro.
> You can learn more about that by reading the book and the documentation.
Expand All @@ -95,7 +78,7 @@ Functions are curried and partial application is as simple as just applying a fu

e.g.

(map (i.+ 1) (list 1 2 3 4 5))
(map (n.+ 1) (list 1 2 3 4 5))

### Macros

Expand All @@ -116,35 +99,36 @@ Custom pattern-matching basically means that you can use macros to provide custo
For instance, the **list** and **list&** macros are used to build lists.
But you can also use them to destructure lists inside pattern-matching:

(case (: (List Int) (list 1 2 3))
(#Cons x (#Cons y (#Cons z #Nil)))
(#Some ($_ i.* x y z))
(case (: (List Nat) (list 1 2 3))
{#Item x {#Item y {#Item z {#End}}}}
{#Some ($_ n.* x y z)}

_
#None)
{#None})

(case (: (List Int) (list 1 2 3))
(case (: (List Nat) (list 1 2 3))
(^ (list x y z))
(#Some ($_ i.* x y z))
{#Some ($_ n.* x y z)}

_
#None)
{#None})

There is also the special **^or** macro, which introduces *or patterns*:

(type: Weekday
#Monday
#Tuesday
#Wednesday
#Thursday
#Friday
#Saturday
#Sunday))
(Variant
{#Monday}
{#Tuesday}
{#Wednesday}
{#Thursday}
{#Friday}
{#Saturday}
{#Sunday})))

(def: (weekend? day)
(-> Weekday Bool)
(-> Weekday Bit)
(case day
(^or #Saturday #Sunday)
(^or {#Saturday} {#Sunday})
true

_
Expand All @@ -164,11 +148,11 @@ Check out the Emacs plugin for it: https://github.com/LuxLang/lux/tree/master/lu

### Where do I learn Lux?

The main resource is the book: https://luxlang.gitbooks.io/the-lux-programming-language/content/
The main resource is [the book](documentation/book/the_lux_programming_language/index.md).

It will always be up-to-date with the latest stable version of the language.

Also, you can check out the documentation for the currently available modules: https://luxlang.github.io/lux/
Also, you can check out [the documentation for the currently available modules](documentation/library/standard/jvm.md).

### How can I contribute?

Expand Down
9 changes: 9 additions & 0 deletions commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,12 @@ cd ~/lux/lux-lein/ \
&& lein install
```

---

[Patron License](https://github.com/licensezero/patron-license)

[Deploy Clojure Projects to Maven Central with Leiningen](https://kpow.io/how-to/deploy-clojure-projects-to-maven-central/)
[How to Generate PGP Signatures with Maven](https://blog.sonatype.com/2010/01/how-to-generate-pgp-signatures-with-maven/)
https://central.sonatype.org/publish/requirements/gpg/
https://github.com/technomancy/leiningen/blob/master/doc/DEPLOY.md

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

# Reference

1. [Wasm needs a better memory management story](https://github.com/WebAssembly/design/issues/1397)
1. https://bytecodealliance.org/
1. [Faster Fractals with Multi-Threaded WebAssembly](https://blog.scottlogic.com/2019/07/15/multithreaded-webassembly.html)
1. https://blog.scottlogic.com/2018/07/20/wasm-future.html
Expand Down
4 changes: 4 additions & 0 deletions documentation/bookmark/computation.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Dynamic binding

1. [Programming with Implicit Values, Functions, and Control (or, Implicit Functions: Dynamic Binding with Lexical Scoping)](https://www.microsoft.com/en-us/research/publication/programming-with-implicit-values-functions-and-control-or-implicit-functions-dynamic-binding-with-lexical-scoping/)

# Construct

1. [Fundamental Constructs in Programming Languages](https://arxiv.org/abs/2107.10545)
Expand Down
3 changes: 1 addition & 2 deletions documentation/bookmark/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@

1. [Architecture decision record (ADR)](https://github.com/joelparkerhenderson/architecture_decision_record)
1. [Seamless API Specification](https://github.com/seamlessapis/seamless/tree/master/domain)
1. https://docs.racket-lang.org/pollen/
1. [Pollen: the book is a program](https://docs.racket-lang.org/pollen/)
1. [Documenting the Clojure/Script Ecosystem – Martin Klepsch](https://www.youtube.com/watch?v=mWrvd6SE7Vg)
1. http://apistylebook.com/
1. https://docusaurus.io/
Expand All @@ -70,7 +70,6 @@
1. https://groups.google.com/forum/#!msg/scala-internals/r2GnzCFc3TY/x3PmIq4cAgAJ
1. http://naildrivin5.com/blog/2016/12/08/learn-graphviz-and-up-your-diagramming-game.html
1. https://idyll-lang.github.io/
1. http://docs.racket-lang.org/pollen/
1. https://opensource.com/article/17/9/modular-documentation
1. https://clojurecademy.github.io/dsl-documentation/#
1. https://www.asyncapi.com/
Expand Down
1 change: 1 addition & 0 deletions documentation/bookmark/tool/text_editor.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@

## Structured editing

1. [Leo](https://www.leoeditor.com/)
1. [Inspiring a future Clojure editor with forgotten Lisp UX - Shaun Lebron](https://www.youtube.com/watch?v=K0Tsa3smr1w)
1. [Dion Systems - The How And Why Of Reinventing The Wheel](https://vimeo.com/485177664)
1. [Towards Tactic Metaprogramming in Haskell](https://reasonablypolymorphic.com/blog/towards-tactics/index.html)
Expand Down
7 changes: 3 additions & 4 deletions lux-bootstrapper/project.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(defproject com.github.luxlang/lux-bootstrapper "0.6.0-SNAPSHOT"
(defproject com.github.luxlang/lux-bootstrapper "0.6.0"
:min-lein-version "2.1.0" ;; 2.1.0 introduced jar classifiers
:description "The JVM compiler for the Lux programming language."
:description "The JVM (bootstrapping) compiler for the Lux programming language."
:url "https://github.com/LuxLang/lux"
:license {:name "Lux License v0.1.1"
:url "https://github.com/LuxLang/lux/blob/master/license.txt"}
Expand All @@ -24,8 +24,7 @@
[org.ow2.asm/asm-util "7.3.1"]
]
:warn-on-reflection true
:repositories [["snapshots" "https://oss.sonatype.org/content/repositories/snapshots/"]
["releases" "https://oss.sonatype.org/service/local/staging/deploy/maven2/"]]
:repositories [["snapshots" "https://oss.sonatype.org/content/repositories/snapshots/"]]
:source-paths ["src"]

:scm {:name "git"
Expand Down
5 changes: 2 additions & 3 deletions lux-js/project.clj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(def version "0.6.0-SNAPSHOT")
(def version "0.6.0")
(def repo "https://github.com/LuxLang/lux")
(def sonatype-releases "https://oss.sonatype.org/service/local/staging/deploy/maven2/")
(def sonatype-snapshots "https://oss.sonatype.org/content/repositories/snapshots/")
Expand All @@ -14,8 +14,7 @@
[:name "Eduardo Julian"]
[:url "https://github.com/eduardoejp"]]]

:repositories [["releases" ~sonatype-releases]
["snapshots" ~sonatype-snapshots]]
:repositories [["snapshots" ~sonatype-snapshots]]
:deploy-repositories [["releases" {:url ~sonatype-releases :creds :gpg}]
["snapshots" {:url ~sonatype-snapshots :creds :gpg}]]

Expand Down
6 changes: 3 additions & 3 deletions lux-js/project.lux
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{""
[#identity ["com.github.luxlang" "lux-js" "0.6.0-SNAPSHOT"]
[#identity ["com.github.luxlang" "lux-js" "0.6.0"]
#description "A JavaScript compiler for Lux."

#deploy_repositories {"snapshots" "https://oss.sonatype.org/content/repositories/snapshots/"
Expand All @@ -8,10 +8,10 @@
#repositories ["https://oss.sonatype.org/content/repositories/snapshots/"
"https://oss.sonatype.org/service/local/staging/deploy/maven2/"]

#dependencies [["com.github.luxlang" "stdlib" "0.6.0-SNAPSHOT" "tar"]]
#dependencies [["com.github.luxlang" "stdlib" "0.6.0" "tar"]]

#program "program"]

"jvm"
[#compiler ["com.github.luxlang" "lux-jvm" "0.6.0-SNAPSHOT" "jar"]
[#compiler ["com.github.luxlang" "lux-jvm" "0.6.0" "jar"]
#dependencies [["org.openjdk.nashorn" "nashorn-core" "15.1" "jar"]]]}
5 changes: 2 additions & 3 deletions lux-jvm/project.clj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(def version "0.6.0-SNAPSHOT")
(def version "0.6.0")
(def repo "https://github.com/LuxLang/lux")
(def sonatype "https://oss.sonatype.org")
(def sonatype-releases (str sonatype "/service/local/staging/deploy/maven2/"))
Expand All @@ -15,8 +15,7 @@
:pom-addition [:developers [:developer
[:name "Eduardo Julian"]
[:url "https://github.com/eduardoejp"]]]
:repositories [["releases" ~sonatype-releases]
["snapshots" ~sonatype-snapshots]]
:repositories [["snapshots" ~sonatype-snapshots]]
:scm {:name "git"
:url ~(str repo ".git")}

Expand Down
2 changes: 1 addition & 1 deletion lux-lein/project.clj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(defproject com.github.luxlang/lein-luxc "0.6.0-SNAPSHOT"
(defproject com.github.luxlang/lein-luxc "0.6.0"
:description "The Leiningen plugin for the Lux programming language."
:url "https://github.com/LuxLang/lein-luxc"
:license {:name "Lux License v0.1.1"
Expand Down
5 changes: 2 additions & 3 deletions lux-lua/project.clj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(def version "0.6.0-SNAPSHOT")
(def version "0.6.0")
(def repo "https://github.com/LuxLang/lux")
(def sonatype-releases "https://oss.sonatype.org/service/local/staging/deploy/maven2/")
(def sonatype-snapshots "https://oss.sonatype.org/content/repositories/snapshots/")
Expand All @@ -14,8 +14,7 @@
[:name "Eduardo Julian"]
[:url "https://github.com/eduardoejp"]]]

:repositories [["releases" ~sonatype-releases]
["snapshots" ~sonatype-snapshots]]
:repositories [["snapshots" ~sonatype-snapshots]]
:deploy-repositories [["releases" {:url ~sonatype-releases :creds :gpg}]
["snapshots" {:url ~sonatype-snapshots :creds :gpg}]]

Expand Down
6 changes: 3 additions & 3 deletions lux-lua/project.lux
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{""
[#identity ["com.github.luxlang" "lux-lua" "0.6.0-SNAPSHOT"]
[#identity ["com.github.luxlang" "lux-lua" "0.6.0"]

#deploy_repositories {"snapshots" "https://oss.sonatype.org/content/repositories/snapshots/"
"releases" "https://oss.sonatype.org/service/local/staging/deploy/maven2/"}

#repositories ["https://oss.sonatype.org/content/repositories/snapshots/"
"https://oss.sonatype.org/service/local/staging/deploy/maven2/"]

#compiler ["com.github.luxlang" "lux-jvm" "0.6.0-SNAPSHOT" "jar"]
#dependencies [["com.github.luxlang" "stdlib" "0.6.0-SNAPSHOT" "tar"]
#compiler ["com.github.luxlang" "lux-jvm" "0.6.0" "jar"]
#dependencies [["com.github.luxlang" "stdlib" "0.6.0" "tar"]
["net.sandius.rembulan" "rembulan-runtime" "0.1-SNAPSHOT" "jar"]
["net.sandius.rembulan" "rembulan-stdlib" "0.1-SNAPSHOT" "jar"]
["net.sandius.rembulan" "rembulan-compiler" "0.1-SNAPSHOT" "jar"]]
Expand Down
5 changes: 2 additions & 3 deletions lux-python/project.clj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(def version "0.6.0-SNAPSHOT")
(def version "0.6.0")
(def repo "https://github.com/LuxLang/lux")
(def sonatype-releases "https://oss.sonatype.org/service/local/staging/deploy/maven2/")
(def sonatype-snapshots "https://oss.sonatype.org/content/repositories/snapshots/")
Expand All @@ -14,8 +14,7 @@
[:name "Eduardo Julian"]
[:url "https://github.com/eduardoejp"]]]

:repositories [["releases" ~sonatype-releases]
["snapshots" ~sonatype-snapshots]]
:repositories [["snapshots" ~sonatype-snapshots]]
:deploy-repositories [["releases" {:url ~sonatype-releases :creds :gpg}]
["snapshots" {:url ~sonatype-snapshots :creds :gpg}]]

Expand Down

0 comments on commit 6283562

Please sign in to comment.