I'll admit that I know basically nothing about how this ecosystem works in 2024, particularly as it relates to push notifications from self-hosted applications as Zulip can sometimes be.
840 karma · joined July 20, 2009
I took econometrics on a dare once. You can't just describe a real-world change as an exogenous shock in general.
I get told "no" a lot.
I schwätz noch d'Muddasprooch.
I studied to be an actuary, but I spent 15 years writing systems software. I am cursed to live a life being intimately familiar with both Excel/VBA and Linux kernel internals.
"I HAVE NO TOOLS BECAUSE I'VE DESTROYED MY TOOLS WITH MY TOOLS." https://www.usenix.org/system/files/1311_05-08_mickens.pdf
Capitalism kills markets.
By losing its grip on shared norms, mores, and folkways, society inadvertently builds the very thing that libertarians fear most: an omnipresent, heavy-handed state. However, it's worth mentioning that this doesn't happen because of a socialist conspiracy, irrespective of one's understanding of what socialism actually is; rather, it happens because a society without internal and cultural self-regulation must necessarily invite a tyrant to step in and govern by his application of law just to keep that society from tearing itself asunder.
topcolor: aaaaaa
pronoun.is/they/them
[ my public key: https://keybase.io/nrr; my proof: https://keybase.io/nrr/sigs/mUwfAxr143F7sGzkfa65fPWi1OnSD3zhNyaE0UdmROA ]
I'll admit that I know basically nothing about how this ecosystem works in 2024, particularly as it relates to push notifications from self-hosted applications as Zulip can sometimes be.
That said, it appears that XMPP might be workable here: eJabberd is still actively maintained, and there are mobile clients (namely, Monal for iOS and Conversations for Android) that appear to support push notifications. Given your talk of self-hosting, I feel comfortable recommending something that requires some degree of system administration investment.
This also goes notwithstanding the indigenous peoples, whose Diné bizaad and Tsalagi, for example, are also spoken here.
I consider UBI less an engineering exercise with requirements that feed into the engineering method and more one of ratemaking and claim severity against an entire trade system. My only goal is to put a dollar amount on a loss event (and get some quantification of how many loss events occur over time while we're not looking). What anyone does with that is up to them.
Use of the second person was certainly a choice.
Who willingly endeavors to write text editors in 2024 when acme(4) exists?
I jest. More seriously though, if the measure of one's value to society is in their ability to crank out CRUD apps, I'm appalled. I want more dishwashers, more plumbers, more framers, more joiners, more cooks, more babysitters, more stonemasons, and the only way any of that kind of hard labor is sustainable is if there's a cushion to fall back on to recuperate. Bodies break. They break more catastrophically when the damage is continued and sustained over time.
I want my girlfriend to feel free to take on domestic work full-time with the knowledge that, no matter what, she'll be paid for it and that her domestic labor contributions, as informal as they are, are valued monetarily without my having to make up the balance. Likewise, I want that there in case I myself want to take up those domestic responsibilities for a while.
These are two cohorts that literally cement the foundation of society, let alone our trade system, not a cavalcade of keyboard cowboys wrangling Ruby on Rails. I want UBI for them because, without them, the entire project literally crumbles.
A lot of the weirdly bad performance comes from all of the machinery that Windows wraps around file access for things like filter drivers. As long as you don't, say, indiscriminately follow every CreateFile() with a CloseHandle() and instead treat handle closure like garbage collection, you can actually eke out pretty good performance.
That all said, yeah, Windows containers are less than great for what I'd argue is one strikingly glaring flaw: Docker container images are built from smss.exe upward. That makes them not immediately portable between ntoskrnl.exe releases.
Plan 9 is, at its core, still an ambient authority system, and I will never try to misrepresent it otherwise. That said, I've found it does an admirable job emulating what a "familiar" (in the sense of not looking completely alien to someone who only knows ambient authority) object-capability system could look like, kind of like how you can emulate the free monad in Ruby despite it not being a functional programming language.
This is possible principally because the mantra of Plan 9 is that everything is a filesystem: if you can bind it into your namespace, you can access it. As a corollary, if you can't bind it into your namespace, you can't access it. It makes shaping one's ambient authority a remarkably productive endeavor.
The Plan 9 primitives were refreshingly simple and consistent.
My only concern is that, without well-thought-out access controls, the only people who will care will be nerds or folks with a high frustration tolerance for poorly-considered human-computer interaction.
My mandatory access control experiments abused the fact that I could have open file descriptors and barely anything bound in the namespace by the time I exec()ed what I wanted to run. What files did those file descriptors reference? You didn't need to know, and you couldn't see them.
What isn't clear are the logistics: what, concretely, do we need to undertake in order to avoid a security posture lateral step from ambient authority to object-capabilities? Importantly, how do we make this ergonomic?
I played with augmenting factotum with a form of mandatory access control, whereby I could ask the hostowner's factotum to mount and bind things into a freshly rfork()'d namespace on an as-needed basis, but the feeling was that it could build up access delegation fatigue pretty quickly.
On Plan 9, I took a lot of glee in rfork()ing my way into a tightly curated namespace that disallowed subsequent use of mount and bind, but that was a deliberate decision under the philosophy of the principle of least privilege. Is that the other half of what you're after?
Of particular note, the kinds of ransomware compromise that lead to organizations asking underwriters to sell them cybersecurity insurance policies wouldn't immediately be thwarted by moving to capabilities. If a principal has valid requisite pointers to the resources they need to do their job, they have valid requisite pointers to the resources that a cryptolocker needs to cause disaster. It's those cybersecurity insurance policies (or regulatory frameworks, where those exist) that ultimately drive the decisions to implement EDRs.
In particular, while it looks like macOS's Endpoint Security API[0] and Linux 4.x's inclusion of eBPF are both reasonably robust (if the literature I'm skimming is to be believed), ETW is still pretty susceptible to blinding attacks.
(But what about PatchGuard? Well, as it turns out, that doesn't seem to keep someone from loading their own driver and monkey patching whatever WMI_LOGGER_CONTEXT structures they can find in order to call ControlTraceW() with ControlCode = EVENT_TRACE_CONTROL_STOP against them.)
0: https://developer.apple.com/documentation/endpointsecurity
The most insidious part of this is when there are entire swaths of infrastructure in place that circumvent the usual code review process in order to execute those configuration changes. Boolean flags like your `config('foo')` here are most common, but I've also seen nested dictionaries shoved through this way.
I've mostly resigned myself today to deploying the configuration change and watching for anomalies in my monitoring for a number of hours or days afterward, but I acknowledge that I also have both a process supervisor that will happily let me crash loop my programs and deployment infrastructure that will nonetheless allow me to roll things back. Without either of those, I'm honestly at a loss as to how I'd safely operate this product.
EDR deployment is an outcome-modifying measure, usually required as underwritten in a cybersecurity insurance policy for it to be in force. It isn't itself insurance.
The focus shifted very hard over the past 15-20 years from selling people new and novel gadgets and software to turning us ordinary folks into "monthly active users." Personal computing got a lot less personal, and Apple leaned into it to stay relevant.
Even then, before you get to that point, you have to prime students for it. Throwing them into the deep end without teaching them to float first will only set them up to drown. This does typically mean lots of worked motivating (counter-)examples at the outset.
It's a big reason why we spent so long on continuity and differentiability in my undergraduate real analysis class and why most of the class discussion there centered on when a function could be continuous everywhere but nowhere differentiable. Left to our own devices and without that guidance, our intuition would certainly be too flawed for such a fundamental part of the material.
It's, in fact, pretty pervasive when interacting with Windows programmatically, just as it tends to be on Unix-alikes, and the fact that PowerShell doesn't do well to acknowledge that is frustrating. (Worse, Windows is a better Plan 9 of sorts with MIDL and COM everywhere, and PowerShell falls pretty flat here too compared to the experience of, say, slinging a dynamically generated command stream directly at fossilcons.)
Yes, I could break into C# or C++ for this, but that takes the tasks that rely on these operations firmly out of the hands of paraprogrammers.