Files
vladfaust.github.io/posts/2020-08-27-sponsoring-onyx.md
2020-08-29 19:40:45 +03:00

257 lines
14 KiB
Markdown

---
title: Sponsoring Onyx
location: Moscow, Russia
excerpt: Standardizing and implementing a system programming language is hard, but you can help!
cover: /public/img/posts/2020-08-27-sponsoring-onyx/think-about-it-meme.jpg
ogType: article
---
Standardizing and implementing a system programming language is hard, but you can help!
Find out how you can sponsor the future, and many hours does it take to create a language mascot, in this post.
<h2>TL; DR;</h2>
I wAnT yOuR mOnEy! 🤑
Pledge to my will at [Patreon](https://www.patreon.com/vladfaust) or buy me a beer at [BMC](https://www.buymeacoffee.com/vladfaust)! 😂😂😂
----
<h2>Table of Contents</h2>
${toc}
## Introduction
I've been working on the [Onyx programming language](/posts/2020-08-20-the-onyx-programming-language) full-time for the past year.
The work includes standardization and implementation.
The process is _near to completion_, and there is a substantial chance for you to write your name in history.
In this post, I'll try to justify my eager will to grab your money with some proof of work.
By the way, I assume you've read my recent [post on System Programming](/posts/2019-08-16-system-programming-in-2k20), there is a [section](/posts/2019-08-16-system-programming-in-2k20/#on-open-source-sustainability) regarding to the open-source sustainability; as long as all my work is open, I'm also, um, an open-source engineer and thus need financial support.
## Deeds Already Done
The onyxlang.com domain name was registered on June 20^th^ 2019.
As I have a sin of registering domains as soon as I have a solid idea, the day may be treated as the Onyx birthday.
Today is August 27^th^ 2020, and I've already spent a plethora of time on Onyx.
You can see it for yourself in [NXSF](https://github.com/nxsf) and [FancySoft](https://github.com/fancysofthq) organization repositories!
### Tracked Time
From June 20^th^ 2019 until August 27^th^ 2020, this is the total time I've spent on *coding* Onyx specification, reference(s) and implementation(s):
::: hero
<big>1043 hrs 34 mins</big>
:::
I've had hard _time_ on maintaining a single project across machines, so there is a lot of them (projects).
You may click on a project's name to see a detailed timing per file.
_Due to WakaTime limitations, I have to split the periods._
From June 20^th^ 2019 until June 20^th^ 2020:
<div class="table-wrapper">
Project name | Time spent{style="width: 10rem"} | Notes
--- | --- | ---
[`onyx`](https://wakatime.com/@vladfaust/projects/hmfpxdoxna?start=2019-06-20&end=2020-06-20) | 362 hrs 28 mins | Three generations of compilers. There even was [one written in Lua](https://github.com/fancysofthq/fnxc/tree/762e945916aa23f128f82541dd68bd8b90ff74f4)!
[`onyxlang`](https://wakatime.com/@vladfaust/projects/gbrlphmype?start=2019-06-20&end=2020-06-20) | 237 hrs 47 mins | The [Specification](https://github.com/nxsf/onyx)
[`lang`](https://wakatime.com/@vladfaust/projects/vnqouuvero?start=2019-06-20&end=2020-06-20) | 109 hrs 25 mins | A mix of specification and references
[`onyxsoftware`](https://wakatime.com/@vladfaust/projects/tjfynfxpvi?start=2019-06-20&end=2020-06-20) | 29 hrs 21 mins | Specification, again
[`kaleidoscope`](https://wakatime.com/@vladfaust/projects/amomlfdyzs?start=2019-06-20&end=2020-06-20) | 25 hrs 32 mins | Well, I've been learning [how to fight dragons](https://github.com/vladfaust/kaleidoscope)!
[`ref`](https://wakatime.com/@vladfaust/projects/vjnrvaqkxn?start=2019-06-20&end=2020-06-20) | 18 hrs 9 mins | Some reference
[`reference`](https://wakatime.com/@vladfaust/projects/bcdesjivqi?start=2019-06-20&end=2020-06-20) | 15 hrs 10 mins | Duh
[`onyxstd`](https://wakatime.com/@vladfaust/projects/swdwsydknq?start=2019-06-20&end=2020-06-20) | 14 hrs 45 mins | An attempt to implement a standard library... in Onyx
[`onyxcontrib`](https://wakatime.com/@vladfaust/projects/jrjvmhlpps?start=2019-06-20&end=2020-06-20) | 10 hrs 7 mins | Some Onyx code like HTTP server implementation
[`onyxc`](https://wakatime.com/@vladfaust/projects/qrrswxtxje?start=2019-06-20&end=2020-06-20) | 9 hrs 58 mins | Another work put in a compiler
[`code`](https://wakatime.com/@vladfaust/projects/wzdrcnwxzr?start=2019-06-20&end=2020-06-20) | 9 hrs 29 mins | [The Visual Studio Code extension](https://github.com/fancysofthq/code)
[`compiler`](https://wakatime.com/@vladfaust/projects/jvoarxevqx?start=2019-06-20&end=2020-06-20) | 7 hrs 36 mins | A compiler?
**Total** | 849 hrs 2 mins |
</div>
From June 20^th^ 2020 until August 27^th^ 2020:
<div class="table-wrapper">
Project name | Time spent{style="width: 30%"} | Notes
--- | --- | ---
[`onyxlang`](https://wakatime.com/@vladfaust/projects/gbrlphmype?start=2020-06-20&end=2020-08-27) | 106 hrs 1 min | The [Specification](https://github.com/nxsf/onyx)
[`nxc`](https://wakatime.com/@vladfaust/projects/rcdubvxegp?start=2020-06-20&end=2020-08-27) | 47 hrs 56 mins | The [C++ Compiler](https://github.com/fancysofthq/fnxc), finally
[`onyx-quickref`](https://wakatime.com/@vladfaust/projects/oygjwrhlgt?start=2020-06-20&end=2020-08-27) | 19 hrs 29 mins | The "quick" [reference](https://github.com/fancysofthq/onyx-ref)
[`onyx`](https://wakatime.com/@vladfaust/projects/hmfpxdoxna?start=2020-06-20&end=2020-08-27) | 14 hrs 31 mins | Mostly reference
[`onyxlang.com`](https://wakatime.com/@vladfaust/projects/aeahlrpcbp?start=2020-06-20&end=2020-08-27) | 2 hrs 44 mins | The website
[`quickref`](https://wakatime.com/@vladfaust/projects/oirloanfrd?start=2020-06-20&end=2020-08-27) | 2 hrs 42 mins | Also [reference](https://github.com/fancysofthq/onyx-ref)
[`fancyx`](https://wakatime.com/@vladfaust/projects/ozhupbhlcw?start=2020-06-20&end=2020-08-27) | 1 hr 9 mins | Some parts of the C++ compiler
**Total** | 194 hrs 32 mins |
</div>
### Untracked Time
One shall not forget that designing a language does not equal constantly slapping keyboard strokes.
In fact, implementing before giving a good thought may lead to [tragic results](https://github.com/crystal-lang/crystal/labels/kind%3Abug).
![[Shower](https://www.reddit.com/r/Showerthoughts/) is the general sponsor of Onyx](../../../public/img/posts/2020-08-27-sponsoring-onyx/thinking-meme.jpg "A 'programming is mostly thinking' meme" =60%x)
I've destroyed several notebooks while deciding on either using `do` / `end` or tabs.
<small>There has been a double of them throughout the year, but who's gonna believe in it?</small>
Would you dare to calculate the number of sleepless hours I've spent on _thinking_?
![](../../../public/img/posts/2020-08-27-sponsoring-onyx/some-notebooks-1.png "A pile of three notebooks" =49%x)
![](../../../public/img/posts/2020-08-27-sponsoring-onyx/some-notebooks-2.png "Contents of one of the notebooks" =49%x)
### Time Tracked in Real... Time
[WakaTime](https://wakatime.com/) is awesome, because it allows to embed recent coding statistics, so you can see how much I <s>wasted my youth</s> coded during the last 30 days!
<figure>
<embed src="https://wakatime.com/share/@vladfaust/d2418af2-a022-4f64-ada1-05fede7619fd.svg"></embed>
<figcaption>Coding activity in the last 30 days (updates daily)</figcaption>
</figure>
<figure>
<embed src="https://wakatime.com/share/@vladfaust/e1ccdc24-0b8a-461e-8dd6-066a5f4220c9.svg"></embed>
<figcaption>Languages used in the last 30 days (updates daily)</figcaption>
</figure>
## Sponsoring the Development
So, the idea is simple: I want to be able to pay my bills while working on a thing both I enjoy working on and being useful for humanity.
Later on, I'm planning to make [NXSF](https://nxsf.org) an official 501 \(c\) non-profit organization, so donations made to it would be tax-exemptive, and I will have an official salary (_finally!_).
However, this would only happen when the language moves to the alpha stage (see the roadmap at [nxsf.org](https://nxsf.org/)).
Right now, Onyx is in the pre-alpha stage.
Nothing is publicly stable, work-in-progress etcetera.
::: off
Note that theoretically I could've tried applying to Open Collective right now, but:
1. It implies free-will donations, but what I'm proposing here is clearly purchase of placement in history;
1. I don't think Onyx is currently "popular" enough;
1. They take **huge** commissions.
:::
----
But I still need to pay my bills.
And as I haven't got a real job for a long, long time, my financial cushion is relatively thin.
As a copyright holder, I'm planning on licensing the Onyx Standard Specification and auxiliary standards with a free, open-source license requiring attribution.
Therefore, I can offer you, a potential sponsor, a **perpetual**\* attribution in the standards I'll be working on during the pre-alpha development stage.
Your name or company logo with an optional link would be put into according "early contributors" sections of the standards.
\* As long as my attribution is required.
For example, if a standard is rewritten from scratch by an NXSF committee without infringing my patent rights, it then stops being a derivation of my work.
### The Dark Scheme
First of all, what I'm proposing is not a _donation_.
It is a _purchase_ of placement in my attribution texts, a _sponsorship contribution_.
Of course, you're free to pitch your ideas informally, but you will not have any voting rights in the standards development with this sponsorship.
----
There are three sponsorship tiers:
1. Individual contribution: from $25 per month (compensates half an hour of my work).
You're attributed with your name or nickname.
1. Individual contribution with a link: from $100 per month (compensates two hours of my work).
Same as previous, but also with your custom link.
1. Business contribution: from $500 per month (compensates ten hours of my work).
Your company's logo and link are attributed.
----
I want to incentivize early contributions, so the <s>pyramind</s> scheme is as follows.
I learned the hard way that estimating time on completing such a big project as a <big>language specification</big> is _quite_ hard.
Nonetheless, I'm planning to move on to the alpha stage in **3-6 months** from today (August 27^th^ 2020).
The earlier you contribute, the more belief you have in me, the more you shall be rewarded.
And higher reward means higher placement in the contributors list!
The placement of your attribution depends on your _contribution score_, which is based on the amount you've contributed.
Each month from today until the alpha stage, the score multiplier is reduced proportionally.
The multiplier stays the same for you throughout the months if you contribute sequentially, i.e. without cancellations.
::: spoiler An example
Let's _imagine_ that alpha stage comes December 13^th^ 2020.
That means that since September 1^st^ 2020, **3 full months** passed.
The contributions are made 1^st^ of each recurring month.
<div class="table-wrapper">
Month a contribution was made | Contribution score multiplier{style="width: 50%"}
--- | ---
September | `1`
October | `(1 - 1/4) = 3/4`
November | `(1 - 2/4) = 2/4`
December | `(1 - 3/4) = 1/4`
</div>
If Jake began their sponsorship in September with $100 per month without cancellations, his final score would be `100 * 1 + 100 * 1 + 100 * 1 + 100 * 1 = 400`.
If John contributed $100 once in October, then skipped November and contributed the same $100 in December (as the hype grows), his final score would be `100 * (3 / 4) + 100 * (1 / 4) = 100`.
As a result, John's placement would be lower than Jake's in the contributors list.
In case of argument, the day a contribution was made matters: making a contribution on 3^rd^ gives more score than on 5^th^.
:::
Note that to be actually listed in the contributors list, you have to contribute the minimum corresponding sponsorship tier amount **at least once** during the pre-alpha stage.
For example, even if you're continuously sponsoring with $24 per month, but never contributed $25+, your name will not be listed.
Also, note that individual tier contributors are listed separately from business tier contributors.
### My Soundcloud
You're welcome to become my patron on [Patreon](https://www.patreon.com/vladfaust) or [BuyMeA<s>Beer</s>Coffee.com](https://www.buymeacoffee.com/vladfaust).
Neither is preferred, choose whichever you like most.
I'm not planning on creating paid posts etc.
The difference is that BMC only has a single tier, but allows one-time contributions, which are counted as well.
Direct Bitcoin donations are also accepted, but they are not eligible for listing.
### Everlasting Dev
I want to assure you that I have no long-term plans on living on these sponsorships.
I'm neither a [YandereDev](https://knowyourmeme.com/memes/people/yanderedev) nor some [Alex Medvednikov](https://vlang.io/).
The sponsorship opportunity is in effect exclusively during the pre-alpha stage.
Once the Foundation is established, you'll be guided to put your money there instead, in the form of donations.
This implies tax exemption and voting rights.
[Fancy Software LLC](https://fancysoft.xyz) is a for-profit company and I as no other else want Onyx to be complete, so I can start working on my premium packages, self-hosted, gaming and AI products.
No Patreon sponsorship or non-profit salary can buy me a house.
![Unless I am a Mozilla Foundation manager](../../../public/img/posts/2020-08-27-sponsoring-onyx/think-about-it-meme.jpg "A 'think about it' meme" =100%x)
----
Until then, I want to be able to pay my bills and maybe purchase a newer graphics card.
In return, you get a chance to be immortalized as a visioner invested in a better future.
Follow me on [Twitter](https://twitter.com/vladfaust) and [GitHub](https://github.com/vladfaust), and also follow [NXSF](https://nxsf.org/) and [FancySoft](https://fancysoft.xyz/) to stay updated about the progress made.
Oh yes, there is also an official (i.e. NXSF-governed) standard planned on the language's mascot.
It will be a [panther-girl](https://en.wikipedia.org/wiki/Catgirl) named Onyx-chan. Nya! 🐾