Notices by divVerent (divverent@misskey.de)
-
Embed this notice
divVerent (divverent@misskey.de)'s status on Saturday, 10-Jan-2026 01:59:09 JST
divVerent
@icedquinn@blob.cat As if Apple stuff were efficient... that is the very thing macOS is not. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Saturday, 10-Jan-2026 01:55:40 JST
divVerent
A #troll #license that's both #GPL incompatible and #DFSG incompatible, but otherwise basically as free as it gets:
DO WHAT THE @!#%'N TUBA YOU WANT TO (BUT ONLY THAT) PUBLIC LICENSE Version 1, January 2026 Copyright (C) 2026 Rudolf Polzer Germany Copyright (C) 2004 Sam Hocevar 14 rue de Plaisance, 75014 Paris, France Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE @!#%'N TUBA YOU WANT TO (BUT ONLY THAT) PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE @!#%'N TUBA YOU WANT TO (BUT ONLY THAT).
The trick is that this license only allows you to do things you want to do, whereas e.g. the GPL even allows you to do some things you feel compelled to do. As such this is an additional restriction the GPL does not allow. This also violates DFSG #1 (Free Redistribution), #5 (No Discrimination Against Persons or Groups), #6 (No Discrimination Against Fields of Endeavor).
#Debian can easily redistribute such software anyway, it just takes one willing person (the Debian package maintainer) to replace the license by one they prefer. Similarly, in a moment of willingness you can just relicense such a work under the GPL, thereby making it GPL compatible just fine (and if you merge such a work with a GPL work, you'll actually have to remove this license file and relicense).
Of course, some may interpret the regular #WTFPL to also have this exact same issue - it after all says "WHAT [...] YOU WANT TO", and not "(AND EVEN THINGS YOU DON'T WANT TO DO)". My license text just makes this even clearer so nobody can go and interpret "WHAT [...] YOU WANT TO" as "ANYTHING". -
Embed this notice
divVerent (divverent@misskey.de)'s status on Saturday, 03-Jan-2026 06:48:29 JST
divVerent
@Suiseiseki@freesoftwareextremist.com @icedquinn@blob.cat Pretty sure editing one line of source code is not fair use.
After all, supposedly just inverting the sense of one conditional jump - a one byte change - is also against copyright.
Fair use is not using an existing work with one tiny change. Fair use is making a new work with a tiny bit of another.
As such, the moment you change one byte, the full force of the AGPL kicks in, as nothing else gives you the right to use the modified software.
Exceptions apply, such as the interoperability restriction in copyright law in Germany which allows you to decompile or even modify software to gain interoperability with another system. This however usually does not cover fixing bugs, unless those bugs hamper interoperability. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Friday, 02-Jan-2026 23:16:19 JST
divVerent
@Suiseiseki@freesoftwareextremist.com @icedquinn@blob.cat My point is, if it is open source, it will be modified, sooner or later. And be it to temporarily work around a minor bug. That's what open source is all about after all (not all though, sure).
So if I e.g. use an AGPL'd web forum, and host that on my server, all is fine. The moment I go in there and edit one line, I suddenly have to provide source.
So I better provide source right from the get-go.
The problem is that even right now many users of AGPL'd software forget that part, as they do not plan on modifying it initially and in that case the AGPL doesn't require it.
Which is why, if I ever license anything under the AGPL or a similar license, I'll make it so the software hosts its own source code automatically, packaged e.g. as part of the build process, or serving from its running directory if there's nothing to compile. Which elegantly solves the problem for everyone involved.
I already did a similar thing before when I licensed something under MIT and/or BSD licenses. The main catch there is that you can accidentally include the library in something and forget to include the license file or the credits, as you may believe it is "GPL compatible" and thus your own GPL stuff is sufficient. It is not. My solution to that is to provide one global symbol in the library that contains the license notice. So if by nothing else, you can always find it with strings on the binary, which fulfills the license requirements and thus I can rest assured nobody will ever violate my license terms by accident.
If someone then actively removes it and doesn't include the license file, there's clear intent. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Thursday, 01-Jan-2026 18:48:35 JST
divVerent
@icedquinn@blob.cat GPL does not require open sourcing changes if you do not distribute the software.
AGPL goes further but has massive usability issues even for end users who do not care. IMHO if AGPL software that provides a network service just had a facility to provide its own source, that would already help a lot so one does not have to take care of that separately. Maybe for HTTP stuff that should even be a standardized URL like https://service/source.agpl? -
Embed this notice
divVerent (divverent@misskey.de)'s status on Thursday, 01-Jan-2026 17:46:46 JST
divVerent
@icedquinn@blob.cat VCs can use GPL stuff too - but it is limited and carries compliance costs, and thus usually more expensive than MIT.
So still a nice forcing function. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Saturday, 27-Sep-2025 06:13:28 JST
divVerent
@don_atoms@hostux.social @aral@mastodon.ar.al Maybe I do not get it, but why?
"People" is the status quo. Other "people" control what I can do with e.g. my phone.
But it should be me, the user.
"The people" as a whole may however exert democratic control over which things should be possible to some extent. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Wednesday, 17-Sep-2025 10:08:07 JST
divVerent
@theorytoe@ak.kyaruc.moe stop badgering me
-
Embed this notice
divVerent (divverent@misskey.de)'s status on Tuesday, 16-Sep-2025 11:45:13 JST
divVerent
@lanodan@queer.hacktivis.me @ska@social.treehouse.systems @mirabilos@toot.mirbsd.org "rm -i", already mentioned, uses stderr both for prompts and error messages.
Which means things look funny (missing line feeds) if you were to e.g. "2>&1 | tee" it.
That is what IMHO should be avoided. Can a compliant rm use /dev/tty for the prompt instead? What if the OS is not Linux - is there always a reliable /dev/tty? -
Embed this notice
divVerent (divverent@misskey.de)'s status on Tuesday, 16-Sep-2025 10:28:21 JST
divVerent
@lanodan@queer.hacktivis.me @mirabilos@toot.mirbsd.org @ska@social.treehouse.systems Which actually demonstrates kinda an issue in "POSIX as it is used today": Logging and interactivity go to the same file descriptor, usually stderr (2).
That's actually a bad thing.
Of course, by the original intent, logging should go to syslog and only interactivity or error messages that are actual output of the tool for the user should go to stderr (and then that's a quite evil mix TBH, and probably should use two separate FDs - as an example, on Linux one can open /dev/tty for interactivity, and then use fd 2 for error output only). Logging to stderr is kinda an antipattern.
And yet people would complain a lot if I were to make my desktop game AAAAXY write its debug logs to syslog instead of stderr... as syslog is only really intended for system services, and the application logs which I write to stderr ending up in ~/.xsession-errors is actually the right place where people would look. OTOH on Windows, applications writing to the Event Log (and not stderr) is very much right.
I think this is actually an example of something that historically grew into a semi bad shape. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Tuesday, 16-Sep-2025 10:28:19 JST
divVerent
@lanodan@queer.hacktivis.me @mirabilos@toot.mirbsd.org @ska@social.treehouse.systems Worse, a completely separated daemon that's now just some weird legacy support in systemd.
But directly talking to journald is bad too, as then the program becomes Linux speciifc for no real reason at all. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Monday, 15-Sep-2025 19:12:57 JST
divVerent
@lanodan@queer.hacktivis.me @ska@social.treehouse.systems As for why I suggested remapping stdout: I too often had issues of dependencies writing random stuff to stdout breaking tools that want to use stdout as a redirectable output for a pipeline.
Most common in shell scripts, not C programs, though... it became very common for me to write
exec 3>&1 1>&2
so that I regain control over what goes to stdout. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Monday, 15-Sep-2025 11:12:27 JST
divVerent
@ska@social.treehouse.systems @lanodan@queer.hacktivis.me I almost wonder if it wouldn't be better to dup2 stdout to 3 and then stderr to 1, so regular printf defaults to stderr.
Or just move to a proper logging library. Maybe just syslog with LOG_PERROR for a start. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Thursday, 11-Sep-2025 11:48:20 JST
divVerent
@lanodan@queer.hacktivis.me @Willow@social.translunar.academy @navi@social.vlhl.dev @mirabilos@toot.mirbsd.org Sadly also a problem for Go, especially the second part of this.
And yet both Rust and Go have a good reason for static linking everything that's in their own language - both languages perform cross package inlining and thus one cannot reliably change an upstream library without recompiling any and all downstream code depending on it.
In C we get away with being less strict on ABI stability guarantees by putting some work on the caller. E.g. even if a module returns pointers to structs (like AVFormatContext), it's kinda common knowledge a caller can't just allocate a new one of the same type and, say, copy the previous context into the new one. As such, correct C code using this type never needs to know its size, and as such, the FFmpeg team kinda stands a chance at maintaining "good enough" ABI compatibility. However, if a caller were to violate this contract, this will very likely end up in undefined behavior - something both Go and Rust don't want to allow by design (even though both languages have their "holes" - e.g. a Go object containing a sync.Mutex better not be copied).
All this could in theory be fixed - but neither Rust nor Go really put any thought into ABI compatibility, and as such, common modules or crates aren't designed to provide it at all, as there isn't even a common coding style in use that ensures it. Ideally, a language should be designed with ABI compatibility in mind. The typical way would be to ensure that no features of the language create implicit requirements for ABI compatibility.
E.g. if all access to struct fields is via setter/getter methods, then these methods can be managed by the linker, and as such, the exact offsets of the fields or the size of the struct no longer matter to the ABI - provided these methods never get inlined of course. But... if we do that, we have massive performance losses. How does Java get away with it then? By its JIT approach, of course, which inlines the accessor methods at runtime.
Outside JITs, we seem to only have the choice of languages like C where the burden is put on the developer of both the caller and the callee, or languages like Rust and Go where this issue hasn't been addressed at all and everything's linked statically instead.
But... there just must be a way... the way how Go resolves interfaces at both runtime and compile time may be a hint: e.g. those offsets to struct fields could be computed at runtime when first needed (or even just at startup), and then stored for code to use (or even just replaced in the compiled code itself - dynamic linkers can do such stuff). We still definitely won't get cross package inlining back though.
That, or ditch the idea of an ABI altogether and just ship source. Or "obfuscated source" i.e. files with intermediate code, like Java does. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Wednesday, 27-Aug-2025 21:18:22 JST
divVerent
@prettygood@socially.drinkingatmy.computer @scathach@stereophonic.space Python 3 is impossible to use correctly anyway.
Exercise: write up a simple clone of the unix "cat" program. Just copy sys.stdin to sys.stdout. Anyone can do that.
Test it manually, all is good.
Then run it on /dev/urandom.
In Python 2 this exercise is trivial.
And yes, it is fixable by two ways (there is an env variable solution, and a code solution to use the underlying buffers, not the handles themselves).
Once you understand that, try writing a program that accepts file names as option args. Those file names may not always be valid in your encoding, as file systems tend to not guarantee that. Another oops... -
Embed this notice
divVerent (divverent@misskey.de)'s status on Wednesday, 27-Aug-2025 21:18:21 JST
divVerent
@prettygood@socially.drinkingatmy.computer @scathach@stereophonic.space Meanwhile in Perl land:
print while <> -
Embed this notice
divVerent (divverent@misskey.de)'s status on Monday, 28-Jul-2025 07:35:27 JST
divVerent
@Loki@whinge.town From what I have seen it is not blacks that get offended by this, but whites who misunderstood MLK.
Having said that, never bring someone food without talking about it first. Dietary restrictions, both religious, medical, generally health related and ethical ones, vary wildly, and so does taste - to the point there exists no single "safe" food that works for everyone. -
Embed this notice
divVerent (divverent@misskey.de)'s status on Monday, 28-Jul-2025 07:35:25 JST
divVerent
@Loki@whinge.town At least two major religions ban alcohol. Call them gay if you want to, but I sure won't take any.
-
Embed this notice
divVerent (divverent@misskey.de)'s status on Monday, 28-Jul-2025 07:35:23 JST
divVerent
@Loki@whinge.town If they are, who is Mitt Romney's boyfriend?
-
Embed this notice
divVerent (divverent@misskey.de)'s status on Monday, 28-Jul-2025 07:35:22 JST
divVerent
@Loki@whinge.town Good point So Muhammad's Aisha was a boy?