ꌗꉓꃅ꒒ꍟꀎ𝔻ꍟℜ𝕊𝕋𝕌ℝℤ

South African, living in Germany, left-leaning, deeply aligned with the opening lines of the Grundgesetz that declare all people to have inherent worth. Nerdy of nature and short of stature, I bend code and words to my purposes yet revel in my sports and thrive in the hills and high places.

  • 8 Posts
  • 21 Comments
Joined 7 months ago
cake
Cake day: December 2nd, 2024

help-circle

  • There are many reasons.

    • Multiplayer games will only target Windows, officially, and might even ban Linux altogether because of the perception that anti-cheat is more costly, impossible, or just hard under Linux. True Kernel-level anti-cheat is not possible on Linux like it is on Windows but the real reason is risk: anti-cheat is an arms race between cheaters (and, critically, cheat vendors who would sell cheat tools to them) and developers and those developers want to limit the surface area they must cover and the vectors for new attacks.

    • The biggest engines, like Unreal, treat Linux as an after-thought and so developers who use those engines are not supported and have to undertake an overwhelming level of extra work to compensate or just target only Windows. When I was working on a UE5 project, recently, I was the only developer who even tried to work on Linux and we all concluded that Linux support was laughable if it worked at all. (To be fair to Tux the penguin: we also concluded that about 99.9% of UE5 was -if-it-worked-at-all and the other 50% was fancy illumination that nobody owned the hardware to run at 4k/60fps and frequently looked “janky” or a bit “off” in real-world scenarios. The other 50% was only of use to developers who could afford literal armies of riggers and modellers and effects people that we simply couldn’t hire and the final 66% was that pile of blueprints everyone refused to even look at because the guy who cobbled them together had left the team and nobody could make heads or tails of the tangle of blueprinty-flowcharty-state-diagramish lines. Even if the editor didn’t crash just opening them. Or just crash from pure spite.)

    • A very few studios, like Wube, actually have developers who live in Linux and it shows but they are very few and far between. (Factorio is one of the very nicest out-the-box, native Linux experiences one can have.) Even Wube acknowledge that their choice to embrace Linux cost them much effort. Recently, they wrote a technical post in their Friday Factorio Facts series about how certain desktop compositors were messing up their game’s performance. To me: this sort of thing is to be expected because games run in windows and render to a graphics surface that must be composited to some kind of visible rectangle that ends up on screen: after a game submits a buffer to be presented, nearly all of what happens next is outside of the games control and down to the platform to implement properly. Similarly, platform-specific code is unavoidable whenever one needs to do file I/O, input I/O, networking or any number of other, very common things that games need to do within the frame’s time budget – i.e. exceedingly quickly.

    • Projects which are natively developed on Linux benefit from great cross-compilation options to target Windows. This is even more true with the WSL and LLVM: you can build and link from nearly the same toolchain under nearly the same operating system and produce a PE .exe file right there on the host’s NTFS file-system. The turn-around time is minimal so testing is smooth. For a small or indie project or a new project, this is GREAT but this doesn’t apply to many older or bigger projects with legacy build tooling and certainly does not apply as soon as a big engine is involved. (Top tip: the WSL will happily run an extracted Docker image as if it was a WSL distribution so you can actually use your C/I container for this if you know how.)

    • Conversely, cross-compiling from Windows to Linux is a joke. I have never worked on a project that ever does this. Any project that chooses to support Linux ports their build to Linux (sometimes maintain two build mechanisms) if they weren’t building on Linux for C/I or testing, already, anyway. (Note: my knowledge of available Windows tooling is rather out of date – I haven’t worked with a team based on Windows for several years.)

    • Godot supports Linux very nicely in my experience but Godot is still relatively new. I expect that we might see more native Linux support given Godot’s increase in population.

    • What’s that? Unity? I am so very sorry for your loss …

    • If you’re not using a big engine, you have so many problems to handle and all of them come down to this: which library do you choose to link? Sound: Alsa, PulseAudio or Pipewire: even though Pipewire is newer and better, you’ll probably link PulseAudio because it will happily play to a Pipewire audio server. Input: do you just trust windows messages or do you want to get closer to some kind of raw-input mechanism? Oh: and your game window, itself? Who’s setting that up for you, pumping your events and messages and polling for draw? If your window appears on a Wayland desktop, you cannot know its size or position. If it’s on X11 or Win32, you can. I hope you’ve coded around these discrepancies!

    • More libraries: GLFW works. The SDL works. SDL 3 is lovely. In the Rust world, winit is grand. wgpu.rs is fantastic. How much expertise, knowledge and time do you have to delve into all these options and choose one? How many “story points” can you invest to ensure that you don’t let a dependency become too critical and retain options to change your choice and opt for a different library if you hit a wall? (Embracing a library is easy. Keeping your architecture from making that into a blood pact is not.)

    NONE of this is hard. NONE of this is sub-optimal once you’ve wrapped it up tight. It is all just a massive explosion of surface-area. It costs time and money and testing effort and design prowess and who’s going to pay for that?

    Who’s going to pay for it when you could just pick up a Big Engine and get the added bonus of that engine’s name on your slide-deck?

    And, then, you’re right back in the problem zone with the engine: how close to “first-class” is its Linux support because, once you’re on Big Engine, you do not want to be trying to wrangle all of these aspects, yourself, within somebody else’s engine.


  • Your therapist is onto something. It is a technique that I often use and have used all my life with some undeniable level of success.

    I’m something of an author and certainly a proponent of vivid imagination and imaginings: story-telling in one’s mind. Drifting away into the realm of subconscious thought is often fun and cathartic even when it doesn’t lead to drifting off and, when it does, it often precipitates those most vivid and memorable of dreams in my experience. The practice is also widely applicable in other scenarios: visualisation can help regulate emotions and cope with adversity. It can be a catalyst for arousal or passion. It can help you maintain composure when you need to perform: I use this, myself, on the tennis court, rock face, dance-floor or stage.

    All of this is good. If this technique brings you more success than I and that suffices to prevent a build-up of chronic and disabling sleep deprivation, over time, then sleep well! That’s all I could wish you.

    Normal sleepers cannot understand insomnia – this is the paradox.

    Normal sleepers are sometimes afflicted with unwelcome wakefulness and cannot comprehend the impact insomnia has on the insomniac’s quality of life. They do not experience the loss of quality of life due to sleeplessness but they do experience the acute discomfort of unwelcome wakefulness on occasion and the drag of exhaustion, afterwards, when they’re sleep deprived and, so, they reduce the insomniac’s complaint to mere impatience with being awake or dismiss it as a lack of fortitude when feeling tired. They conclude that the cure for insomnia is falling asleep.

    They fail to realise that no matter how much of a relief it may be, sleep is not the main event: an insomniac wishes to wake up and feel well rested.

    With reference to my original post (that is: in this thread. elsewhere: I have written more) the ADHD insomniac wishes to wake up and feel as if, while at rest, their brain sorted the clutter within their mind that they could never have hoped to approach while awake, leaving peace and space to approach a new chapter of consciousness free from yesterday’s overwhelm.

    With reference to a long period of my adult life: the insomniac sometimes doesn’t even know what “well rested” feels like. They live in a world that stresses productivity and resilience and fortitude and overcoming hardship through determination. They’ve been rising at the wrong time of day since their teens, needing to be at school at the earliest hours, and indoctrinated into believing that that is normal. They drink six cups of coffee before noon and wonder why their hand shakes when they try to write. They quip: “sleep when you’re dead.” They think they were born ready and will answer every call. They sink into depression. The insomniac does not know that there is any other way to live until that RAM… ¬

    Your analogy with RAM is apt; I’ve made it, myself, before. Do you know what a process can do when it runs out of RAM? I’ll spare you the details. But that’s what happened to me. I’m OK, today.

    Or, rather, I’m not OK but I have achieved a very poor and shoddy steady-state that is keeping me alive and affords me a few nights of sleep per week. This is the hard-restart every five-to-seven days that lets me clear the RAM but I feel that the memory-leak goes untreated and remains an intrinsic foible or my individual ADHD melange. I continue to seek a better and more sustainable solution but I am up against a system that does not understand that about which I write so many words, so passionately.

    I know how to make certain cogs turn in the machine and the machine prescribes pills. Pills are a mixed bag. The vast majority do nothing of use and cause unwanted side-effects. Of those I have tried, those that induce sleep with any degree of efficacy do so in a way that meets only the normal sleeper’s needs: they facilitate falling asleep but do not lead to awakening well-rested or improved quality of life the day after. They do not allow my ADHD brain to dream and sort and sift my thoughts like I feel natural slumber allows.

    There is one exception but even it is highly stochastic – sometimes failing to have any effect at all. It’s also addictive and has a non-zero street value so I can only get it prescribed in quantities that allow me to take it about once or twice a week – hence my steady state. (I am loath to complain because I am still alive and doing science.)

    In case my vague description of “quality of life” is hard to parse, here’s another anecdote: having any chance to sleep intensively, even once or twice a week, has all but cured a growing alcohol addiction that I frankly didn’t notice. I was approaching a bottle of cheapest wine a night, alone. I drink no more than half a dozen beers a month, now. I did not join a movement or group or start a twelve-step programme. I acknowledge that these groups and twelve-step programmes are disproportionately effective and save countless lives but, for me, they were not needed after I realised that I actually enjoyed experiencing and remembering the best moments in my life when I felt awake and vigorous enough to be present for them and, conversely, I did not enjoy being drunk and missing them, throwing up, falling over in the middle of city streets while walking home (across the entire city because I was too drunk to do anything else) and having nothing but a headache the next day.

    Alcohol doesn’t make me sleepy, either. I did not turn away from alcohol because I had substituted it. It never served that purpose. If anything, alcohol makes me irritable and fidgety and hyperactive in a restless and annoying way – not sleepy.

    I set the bottle aside simply because I started having fun, being awake, and forgot about drink. Quality of life means being awake and aware of waking life and that distracted me from the vice. I still drink, very occasionally, but only when “life” happens to coincide with an event that lends itself to enjoying a beer – after a few hours in the bouldering gym, on a sunny Saturday afternoon, for example – seldom, appropriate to occasion, and by choice, never by habit.

    This is why this topic is dear to my heart and I wrote the original post. I’ll be the first to admit that I have drifted from the point, here, but, perhaps, you find this intriguing to read, too. (I’ve just ended another trial with different antidepressant medication that was supposed to also assist with insomnia – the outcome was disappointing on all counts – and also just ended yet another season of psychotherapy, also with disappointing outcomes, so I was in an opinionated mood when I chose to reply.)

    If your imagination proves able to lull your mind – sleep well. The exercise is never bad.





  • Zed is very interesting. I know it.

    Very recently, I found a fork of Zed that gutted the AI Assistant integration and Telemetry. I forked that, myself, and took it further: gutting automatic updates, paid feature-gating, downloading of executable binaries and runtimes like Node.js (for extensions that don’t compile to WASI), integration with their online services, voice-calling, screen sharing, etc.

    My branch ended up down 140 000 lines[1] of code and up less than 300! It was educational and the outcome was absolutely brilliant, to be fair. In all honesty, forking it and engaging in this experiment took less than 24 hours even though I restarted three times, with different levels of “stringency” in my quest.

    This experiment was very realisable. Forking Zed and hacking on it was quite possible – the same cannot be said for just “forking Electron” or “forking VS Code” or even getting up to speed on those projects to the point of being able to fix the underlying issues (like this OP) and submit merge-requests to those projects. They have a degree of inscrutability that I absolutely could overcome but would not, unless I was paid to at my usual rates. (I have two decades of professional development experience.)

    I shelved the effort – for the time being – for a few reasons I don’t particularly want to extenuate, today, but I shall continue to follow Zed very closely and I truly, deeply hope that there is a future in which I see hope (and, thus, motivation) in maintaining a ready-to-go, batteries-included, AI-free, telemetry-free, cloud-free fork.

    Part of maintaining a fork would include sending merge-requests upstream even though I should hardly expect that my fork would be viewed favourably by the Zed business. But, from what I can tell, Zed seem to act true to the open-source principles – unlike many other corporate owners of open-source projects – and I see no reason (yet) to believe they would play unfairly.


    1. No word of a lie! The upstream repo is well over 20k commits and over 100 MB in volume. Zed is not a nice, small, simple code-base: it is VAST and a huge percentage of that is simply uninteresting to me. ↩︎







  • Taiga is too broad. I tried it out with all the best intentions and, quite simply, it is too big. It is too complex and complicated and feels extremely heavy to use.

    From decades of professional experience, I know that all forms of planning are performed breadth-first and not depth-first. One jots down a bunch of titles or concepts and delves into them, fleshing them out and adding layers of detail afterwards. Taiga just doesn’t seem to facilitate that workflow.

    It is focussed on fixed ideas like “epics” and “user-stories” and its workflow needs one to understand how your planning should fit into those boxes. I never work like that: I don’t know whether a line-item on a scrap of paper is an “epic” or a “story” or just destined to be an item in a bulleted list, somewhere within something else. I don’t want to have to choose what level of the plan the line-item fits before I capture it in my project tracker – I just want to type it up, somewhere, and be able to move it around or promote it or add stuff to it or whatever, later.

    In summary: Taiga seems “fine” but just isn’t for me.


  • I think I’m in agreement. I’m also inspired by Cory Doctorow’s recent piece in which he talks about how his blog – pluralistic.net – is ascetic: basically just a static site that spreads through other channels.

    Hugo seems ok for this, I’m thinking, along with just about any static site hosting and my own domain name.

    Moving into the new year, I’m going to actually do this properly but one key objective is this: I am determined only to write properly on positive topics, creativity, passion, delight and inspiration and to ignore all the hate and the destroyers and the bad stuff.

    The TL;DR of my thesis is basically this: I only wish to write about topics I think are worthy of being read and, for me, any work is only worthy if the reader actually stands some slight chance to gain something from ingesting it.

    I’m very nearly 40 years old, recently a father, unemployed, burned-out, and of such a confusing string of nationalities that I don’t get to vote anywhere in the world despite having worked and paid taxes in three countries on three distinct continents, all of which are supposedly “democracies”. As a reader, I can do little against the haters and the destroyers and the plutocrats and I need learn nothing new to recognise them and see them for what they are. As a reader, then, I get no worth from reading more assessments of the “bad”, neither is there any shortage of scriveners far more informed and skilled than I who write about that bad. As a writer, I am only interested in writing about the “good”: things that other readers can actually derive value from ingesting.

    That said, I know I need an outlet to vent in and I know I need another space to experiment in. I don’t mind if the “proper” journal and the free-association style blog become unofficially associated with each other for much the same reasons why I don’t mind when my personal stuff and my open-source contributions signed under my real-life name get associated: I’ve nothing to hide. (I choose to live in the world I wish existed: a world in which I need not hide.)

    But I don’t want them to be too easily linked because that sort of thing becomes a career limiting move simply because dumb algorithms will readily cancel one’s professional profile long before any actual human ever sees one’s job application or C.V. in a real-life setting.

    I’m thinking I’ll use the WriteFreely space as the sand-box and do the real essays, properly, with something like Hugo.

    I also am a huge fan of personal pages and wish to see their return. Would you join a web-ring with me?


  • I guess the KDE team just triggered my “see red” response. I saw an unfamiliar notification and immediately went on the offensive because of how often attention-stealing and attention abuses in general are exploited by bad actors.

    I know the concept of startle-training very well. It has, in fact, been part of my training for certain volunteer roles that were carried out in stressful, objectively dangerous and high-risk scenarios but those were all In Real Life. They were all for a cause in which I believed – I volunteered to be there.

    It is precisely so I have patience and resilience to handle those In Real Life scenarios that I so jealously guard my attention when I don’t judge that frittering it away on silly annoyances is warranted.








  • I do like putting task-cards in columns and dragging them from left to right but I’m explicitly not going the Kanban route nor the Scrum route. I reject the prescriptivism that inevitably accompanies those “brand name” methodologies, even while I acknowledge that both methodologies do encompass several excellent ideas one might usefully borrow.

    In fact, I always rather liked Trello simply because one could do whatever the heck one wanted with its boards – and the hotkeys were brilliant. (If I test out Planka, hotkeys will be evaluated for sure!)

    Sadly, Trello devolved into and, yeah, I wouldn’t touch any Atlassian[1] product with a barge pole, today, nor have I in years.


    1. Do they still charge for dark-mode in some of their products? Anyone who has managed a large team that includes neuro-diverse developers knows that dark-mode is tantamount to an accessibility feature and charging for it is just a dic•-move. ↩︎




  • I’m fairly certain that the original authors recommended using another generator – like split-mix-64 – to extrapolate low-entropy seeds to the required state width. Using high-resolution time as a seed is common practice throughout software development and I think they were envisioning split-mix-64 to be adequate to get decent seed entropy from a linearly increasing timestamp. I’m certain it would be adequate to widen 32-bit seeds to the required width.

    If my memory is correct, the reasoning was that split-mix-64 – although not as robust a PRNG as the XO*SHIRO family – is trivial to compute and reaches a reasonable level of entropy without needing many iterations.

    It looks like[1] the state width is 256-bits, anyway – not 64 bits.


    1. I’ve lost my references and don’t have time to go digging through archives right at the moment but I pulled up my Rust library that implements my PRNGs (which is a port of a C++ re-implementation that exploited learnings from implementing a C# library to replace Microsoft’s original, slow .NET PRNG, which was based on the research paper’s reference implementation, and ran in production for years and years…) ↩︎