free software resistance

 the cost of computing freedom is eternal vigilance

### fig-is-one-decade-old *originally posted:* feb 2025 the official date of fig 0.4, which i have long believed is the first version of fig- is february 2015. the actual month mentioned in fig 0.4 is january 2015 (which i suspect is from forgetting to change the string) and filedates suggest that fig dates back to the first of the month (which it might). for whatever reason then, the anniversary has always been celebrated on february 5th. as to why the first version of fig is 0.4, i believe its predecessor made it to 0.2 and fig was versioned 0.4 to put a single version between them. there is even a file that has some fig features but either lacks proper fig syntax handling or includes features that were slated to be removed, which appears to be an intermediary version. its not numbered 0.3, but that would be appropriate. it isnt really a version of fig, but fig was created based on another project i had coded. at any rate, fig was an experiment that was based on another experiment. i wasnt sure i would be able to create a programming language i would really prefer using over python, but 10 years have shown that i did. ive used it for tutoring, ive created derivative projects- in the past year i even started work on a repl and also a version based on lua instead of python- but i have yet to create any language i find as useful to my purposes as fig. in the july following figs 1 year anniversary, i started using the language to automate the analysis of various they/linux distributions, which turned into automated remasters of several distros. it would download an iso, mount it and make changes, then create a new bootable iso based on the original. this gave me incredible control over distributions, i even automated versions of trisquel and debian live with systemd to boot with upstart and sysvinit, respectively. the original "fig os" was a remaster combining TWO distributions, and the goal was to add the uniqueness (some special utilities and configurations) of one to the stability and more full featured (and more libre) setup of another. the purpose was to create a new "libre" version of that distro. and to do it in a way that was easier to maintain, as the maintainer of that project had abandoned it. while i did succeed in creating a hybrid distribution which made the features of both available (and i did become really good at stripping distributions from dvd back to cd size also) i lost interest in the hybrid and simply started creating my own distribution project. but then microsoft purchased github, and my focus became removing github-based software whenever possible, and finding alternatives. this, paired with the frustration of various distributions selling out more and more and more to the systemd monopoly, ultimately led me to move to openbsd a few years ago. i havent done as much coding in the past month, other than to add a feature or two to my editor, which is written in python. but a quick, fun program i did a few months ago is a good example of the sort of things i write using fig, as is this program from december: => gemlist04.fig.html thats a program that works with files and text and i would categorise it as a utility, but i have recovered the other program i just mentioned from a screencap (i cant seem to find a copy of the text itself, i might have it on a usb) and ive also got a video which ive grabbed a frame from to show the output: => 2025/19sc.png the code is included here, licensed zero-clause bsd like the license text for this page: ``` function rgbcolor r g b c python now = 0 ; figcgapal[c] = (r, g, b) fig fig p rgbcolor 195 64 195 8 p rgbcolor 215 64 215 9 p rgbcolor 235 64 235 10 p rgbcolor 255 64 255 11 p rgbcolor 195 32 195 12 p rgbcolor 215 32 215 13 p rgbcolor 235 32 235 14 p rgbcolor 255 32 255 15 c now highlight 7 cls x 350 y 290 s -3.14159 times 43 f 3.14159 times 43 for g s f 0.0001 r g times 3.05 sin times 58 now c plus .00000314159 swap now c yi y int xg g cos times 30 times r divby 10 plus x yg g sin times 15 times r divby 10 plus yi ca c int mod 8 plus 8 now pset xg yg ca now y minus .000075 swap now y next now lineinput ``` the concepts of fig are simple- have easy commands, low (fixed) parameter counts, optional syntax whenever reasonable (not optional for strings or comments) and keep the number of commands low enough that its possible (but not necessary) to learn them all. fig is extensible using inline python, as fig is implemented in and compiles to python. but i never intended fig to be a perfect language- it was an experiment to make the friendliest language possible, based on what i like about basic, logo and python. commands are ordered left to right, like bash pipes. parenthetical expressions are avoided, to make it feel less like math equations (as much as possible). i would like to see more people make small, simple, easy and fun languages like this. not that people dont, but fig is based partly on the idea that anyone can. fortunately, the lessons to get you started keep getting simpler and more common, even on youtube. the main thing that stops people imo, is making it more complicated than it needs to be. the complexity that fig does have, it has because of various practice languages i made earlier, the excitement and ambition of creating fig a step at a time, and the "clever" things i bolted on to keep fig as close to its ideals as possible, such as the quirky way it handles opening, closing and writing to files- based on what i hated about that (because it only made sense from the standpoint of dos) with basic. i particularly dont like file handles, and fig handles (abstracts) those in a pretty unique way. i wanted it to be based on a filepath string, not a handle. and that wasnt really planned, its just something i tried and it worked the way i wanted. i do wish more people learned how to code in fig. but more than that, i wish more people were inspired to create their own language. fig is useful (to me) and its helped me do A LOT of work i never wouldve bothered doing in any other language- not basic, not python, certainly not bash. most of the groundwork was laid in the first weeks, statements with more than one line (especially user defined functions) were also an adventure to implement, and most versions of fig were added for the sake of minor fixes or compatibility with older versions of python (when i was playing with an old mac that didnt run a newer python) and i typically implemented 2 or 3 features at once. with fewer than 100 commands, all chosen very carefully and implemented as possible / as needed, you really can make a programming language and do it in a way thats easier to create and maintain than you think. i did make a more extended version, called figplus, starting in february 2019 with the final version (0.5) in april. its got some very cool features- it brings it the "codex" hybrid list/dict "virtual type" (its native functions handle lists and dicts interchangeably, sacrificing efficiency) and it allows "compterpreting" by running code from the command line, compiling to a string and then running exec, plus it has extra graphics features. but figplus was an experiment to see what i would do if not keeping the limits i put on fig development, and as cool as it is, i really dont use figplus. i would if i really needed it, but i tend to lean on fig instead because of its simplicity and because the cool features i added to figplus are really features i rarely need. license: 0-clause bsd ``` # 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ``` => http://x3zzdf72ww46zbdiejwvledefbe2dgsdzqbaeljarq5n4i2dfiwkauqd.onion:8080/