Threads for felixgallo

  1. 50

    To be honest, I’m really sad and concerned about people opting to use WSL. It really looks like another EEE scheme. If you want to have freedom in the long run, please, please participate in the FOSS desktop ecosystem: help debug driver issues, help maintain HCLs to make it easy for new users to pick knowingly well-supported hardware, at the very least, report the bugs you see.

    WSL opens up a way for MS to push the restricted boot for desktops without people noticing who would otherwise be the first to notice. Monopolistic proprietary software vendors are not friends of FOSS. Never were, and never will be. Don’t trade essential liberty for temporary convenience.

    1. 10

      Unfortunately, “the linux desktop” is also wholly captured by monopolistic proprietary software vendors, who are also not friends of FOSS. The systemd debacle, the dbus debacle, all the renderer debacles, the app store debacles, the various gnome debacles – it’s monopolistic proprietary tasteless foisted broken politically-contrived nonsense all the way down. It’s hardly surprising that people use WSL which at least has the benefit of you being able to run productivity software that consistently works.

      1. 4

        With big corporations one can never know, but it seems to me that in recent years Microsoft have been a good citizen of the open-source software world. I’m willing to give them the benefit of the doubt.

        That being said, I’m also concerned about native Linux desktop losing traction, but I have think this has been happening steadily for a while now. I used to know a ton of people running Linux as their primary OS, and now almost everyone’s on macOS and WSL. Perhaps most people don’t care much about the underlying principles, as long as they get their work done.

        1. 22

          Well, and from your very post it’s clear where it eventually leads. macOS isn’t the “polished UNIX experience” people thought it always would be. I believe we should make the system we want or else we risk a situation when there will be nowhere to migrate to.

          That said, I do get my work done on a Linux desktop and nothing crashes for me on 8th gen Intel NUC hardware.

          1. 20

            I’m one of them. I’m actually the last person to switch out of… about 20 regulars? in what was once a local LUG. I still run Linux and OpenBSD pretty much everywhere I can except for my main working machine, which runs macOS. I’m not happy about it, but it’s also not a matter of convenience.

            It’s not that I’ve sacrificed the principles of open source but, realistically, I do not trust the vision that’s currently prevalent in the world of FOSS desktop. It’s a vision that I don’t understand – seeking to provide software for users who understand and care about the technical aspects of fundamental liberties, who can file bug reports and test fixes from a devel branch, or even submit patches, who are willing to follow HCLs before buying new hardware, but are also confused by too many customisation options, and intimidated by small icons and buttons. It produces software that I find less capable with each release, and which makes it harder and harder for me to make things that others find useful, to work on new things, to learn things about computers and things other than computers, and so on.

            Showing up with patches – or heaven forbid, bug reports – that do not demonstrate a sufficient understanding of these principles is met with hostility by many communities, and I honestly have no interest in even trying anymore. I’ve no intention of dying on hills held by designers who asked four interns to perform these actions and rate how hard it was, thus unlocking the secret of how to build the UIs that will finally bring upon us the Year of Linux on the Desktop.

            And I honestly have no interest in going the underground route, either – running dwm, i3, or resurrecting my FVWM config from 15 years ago and going back to using mc, pine, bc and emacs under xterm. I like file managers with nice-looking icons and proportional fonts, I like graphical email clients and, generally, all these programs that try (and sometimes fail) to figure out what would be good tomorrow, rather than to get to the essence of what was good thirty years ago.

            But I also think that it’s not a good idea to develop professional software – terminal emulators, text editors and IDEs, CAD/CAE tools, system administration tools, whatever – by using UX and UI design principles for novice users and freemium apps. All you get is software designed for people who don’t want to run it in the first place, and deliberately made worse for those who do want to run it.

            I wish there was a better way, but if the best way to write things that run under Linux and help others do cool things with it is to get a Macbook or a Surface and SSH into a headless machine, or run WSL, I can do that. (And honestly, I totally get the appeal, too. After a few months with iTerm 2 – which is also open source, and I mean GPL, the commie kind of open source – I don’t want to touch Gnome Terminal ever again in my entire life).

            1. 5

              That we agree on principle 1. “professionals first” comes as no surprise ;-)

              In that vein though, can you think of concrete/specific examples that illustrate the conflict of interests/disconnect? The easiest I have from the OSX brand of face-meets-palm would be the dialog:“Terminal would like to access your Contacts”. Unpacking it speaks lengths about what is going on.

              1. 2

                My favourite one lately is from Windows, which insists on automatically rebooting in order to install updates in the middle of the night so that you’re greeted by a full-screen ad for Edge, which is now also your default browser a better and more secure Windows experience in the morning. That works out great on paper, but in practice, lots of us who use computers for work just wake up to the Bitlocker screen, and five minutes of please wait, installing updates.

                From Linux land… I’ve honestly ragequit a long time ago, I kept poking it for three or four years (by which I mean I mostly ran a bunch of old console apps and a few Qt apps) and eventually gave in and bought a Mac. I mostly have a bunch of bad memories from 2012-2017 or so, after which my interactions with it were largely limited to taking point releases of XFCE, Gnome and KDE for test drives and noping the fsck out back to FVWM. So most of my complaints are probably either out of date, or oddly generic (everything’s huge and moves a lot and that’s not nice to my ageing eyes).

                Plus… there’s this whole approach to “improving” things, you know?

                When I got this stupid Mac, it was uncanny to see how many of the things I used back in 2006 or 2007, when I last used a mac, are still there and work the same way. Even Finder has the same bugs :). Meanwhile, there are things I liked in KDE 3.5 that literally got rewritten and broken three times since then, like custom folder icons support. Which is now practically useless anyway, since icons from modern themes look pretty much the same below 64x64px – I get looks great in screenshots but guys I have folders with a hundreds of datasheets, there’s no way I can ever find anything in there if I can only see like 12 files at a time.

                (Edit: FWIW, I think we pretty much agree on all twelve :P)

                1. 2

                  My favourite one lately is from Windows, which insists on automatically rebooting in order to install updates in the middle of the night so that you’re greeted by a full-screen ad for Edge, which is now also your default browser a better and more secure Windows experience in the morning. That works out great on paper, but in practice, lots of us who use computers for work just wake up to the Bitlocker screen, and five minutes of please wait, installing updates.

                  Somewhat ironic how denial of service is rephrased as a double-plus good security measure, no? Coming from a SCADA angle, the very idea of an update of any sort borders on the exotic (and erotic), but the value of that contract seems to have been twisted into a means of evaluating change by forcing it on users and study the aftermath. The browsers are perhaps the most obviously, but regardless of source it is quite darn disgusting.

                  From Linux land… I’ve honestly ragequit a long time ago, I kept poking it for three or four years (by which I mean I mostly ran a bunch of old console apps and a few Qt apps) and eventually gave in and bought a Mac.

                  So amusingly enough I was a die hard FOSS desktop user from the mid 90ies until the arrival of OSX (though raised in Solaris lands). Most of my bills went to pay the cluster of PPC mini macs I used to do my dirty deeds (the biggest of endians). Come 10.6 it was clear that Apple’s trajectory was “fsck you devs, we’re through” and I took it personally. Left all of it to rot, returned to FOSS and was dismayed by what the powers that be had done to the place. The tools I was working on towards, “solving oscilloscope envy by reshaping the debugger” had to be reused to build a desktop that “didn’t change beneath my feet as I was walking around”.

                  I get looks great in screenshots but guys I have folders with a hundreds of datasheets, there’s no way I can ever find anything in there if I can only see like 12 files at a time.

                  I would like to run an experiment on you, but the infrastructure is lacking for the time being – here is one of those things where VR performs interesting tricks. Posit that a few hundreds of datasheets are projected onto a flat surface that is textured onto a sphere. You are inside of that sphere with a head mounted display. How long would it take your cognition to find “that one sheet” among the others, versus scrolling through a listview…

                  1. 1

                    the value of that contract seems to have been twisted into a means of evaluating change by forcing it on users and study the aftermath. The browsers are perhaps the most obviously, but regardless of source it is quite darn disgusting.

                    IMHO this trench war of updates, where users are finding new ways to postpone them and companies (in this case, Microsoft) are finding new ways to make sure updates happen, is entirely self-inflicted at the companies’ end.

                    Way back when big updates were in the form of service packs, there was generally no question about whether you should update or not. If you were running bleeding-edge hardware you’d maybe postpone it for a week or two, to let the early adopters hit the bad bugs, but that was it. As for the smaller, automatic updates, people loathed them mainly because of the long shutdown times, but it was generally accepted that they at least caused no harm.

                    Nowadays, who knows. During lockdown I had to go halfway across the city to my parents’ house twice to get my overly-anxious mother (elementary school teacher who’s one or two years away from retirement, so pretty scared when it comes to tech) past the full-screen ads with no obvious close buttons, restore Firefox as a default browser and so on, while she commandeered my other parental unit’s 15 year-old, crawling laptop to hold the damn classes. No wonder everyone dodges updates for as long as they can.

                    I would like to run an experiment on you, but the infrastructure is lacking for the time being – here is one of those things where VR performs interesting tricks. Posit that a few hundreds of datasheets are projected onto a flat surface that is textured onto a sphere. You are inside of that sphere with a head mounted display. How long would it take your cognition to find “that one sheet” among the others, versus scrolling through a listview…

                    I’m sure you’ve thought about this for longer than I have, but I suspect there are two things that determine success in this case:

                    1. An organisation system that matches the presentation (e.g. alphabetical order for a one-column list view)

                    2. Being able to focus on a sufficiently large sample that you can browse the list without moving your eyes back and forth too much

                    3. is pretty obvious, I guess. I like to go through listviews because these things are sorted alphabetically, and while many of them have very stupid names like slau056.pdf (which is actually MSP430x4xx Family User’s Guide), I usually sort of know which one I’m looking for, because manufacturers tend to follow different, but pretty stable conventions. As long as they’re laid out in a way that makes it easy to “navigate the list” (in stricter terms, in a way that preserves ordering to some degree, and groups initial navigation options – i.e. sub-directories – separately so they’re easy to reach, wtf GTK…), it’s probably fine.

                    4. probably bears some explanation because it’s the reason why large icons suck so much. Imagine you have a directory with 800 items and you’re looking for one that’s in the middle. If you can only see 10-12 at a time, then a) it takes a lot of time to hit the exact window with the file you’re looking for, and the tiniest amount of scroll moves up and down by a whole page of items. So you get to go back and forth between dozens of 10-item pages, and often overshoot, then undershoot the one you’re looking for dozens of times, all while wiggling your eyes all over the window.

                    I dunno what to think about the inside of a sphere. My knee-jerk reaction is to say I’d get dizzy and that a curved, but field-of-view-sized surface might be a better fit. But gentleman skeptics once complained that trains would be draughty, too, and it turned out they were, but also that it was more than worth it. Just like flying machines became a thing once we finally figured out imitating birds is just not the right way to go about it, we’re probably going to make real progress in organising and browsing information only at the point where we stop imitating libraries, so I think this meets the essential prerequisites for success ;-).

                  2. 1

                    (everything’s huge and moves a lot and that’s not nice to my ageing eyes).

                    For what it’s worth, the Reduce Motion accessibility setting helps with some of that.

                2. 7

                  I think the worst thing that happened to FOSS is UX designers (and that includes things like Flatpak).

                  It doesn’t matter whether the reason for “software won’t do X anymore” is some evil mega-corp or some arrogant UX designer, the result is the same.

                  (And before anyone slides in with a “let me mansplain UX to you”: I’m good, thanks.)

                  1. 8

                    The field of UX has massively regressed in the last 15-20 years, everywhere, not just in the FOSS world. It’s a cargo cult at this point. Even many (most?) of the organisations that allegedly practice “metrics-driven” design routinely get it so wrong it’s not even hilarious – they make fancy graphics from heaps of data, but they have no control groups, no population sampling, and interpretations are not checked against subject feedback (which is often impossible to get anyway, since the data comes from telemetry), so it all boils down to squinting at the data until it fits the dogma.

                3. 11

                  It’s a common thing for people to discuss what {company X} thinks about {idea Y}. But if you work for a corporation at least a while, you learn there’s no such sentiment. It’s closer to {high level exec A} thinks that {area B} is a great way to expand and {investing in C} is the way to do it. Soon person on position “A” may change, “B” may have a good replacement, and money pumped into “C” may turn out to not have a good return. Microsoft doesn’t like or dislike anything. Managers with enough power temporarily like some strategies more than others.

                  We had Balmer on one extreme, now we’ve got Satya who seems like the other extreme. In 5 years we may have either: Balmer++ deciding to sue Valve for Proton, or Satya++ deciding to opensource parts of windows kernel, or someone in the middle who approves something nice for FOSS and destroys something nice for FOSS, because they don’t care about that aspect at all, or anyone in between.

                  Corporations don’t deserve the benefit of the doubt. Some execs do. Just remember they’ll be out in a few years.

                  1. 2

                    This is very true.

                    I think this phenomenon is laid out very well in the book The Dictator’s Handbook. It claims that countries, companies, and other entities don’t have opinions or preferences; people are the top and at every level do. They are looking after themselves.

                    Disclaimer: not the author of the book; it’s just one of my favorites, and I recommend it for everyone to read.

                  2. 4

                    With big corporations one can never know, but it seems to me that in recent years Microsoft have been a good citizen of the open-source software world. I’m willing to give them the benefit of the doubt.

                    What have they done, or stopped doing, to earn this praise?

                    1. 7

                      They’ve released a lot of core tech as open source: VS Code, .NET Core, some Windows programs such as Terminal and Calc, etc. They’ve supported a lot of other open source things less directly: NuGet, Python packages, etc. They’ve more or less stopped campaigning, advertising and litigating against open source stuff the way they did up through the mid/late 2000’s – see here for entry points to some good examples.

                      I’ll happily give Microsoft the benefit of the doubt, but we’ll see if they continue this strategy of being nice for another 5-10 years, or whether we enter the “extinguish” phase, more or less the same way Google has in the last 5 years. If Microsoft thinks they can make more money being nice than being evil, then that’s what they’ll do; that’s the only decision path that matters to them.

                      1. 12

                        They won’t abuse their monopoly too much, because they don’t actually have one. It’s no secret that they open-sourced .Net to make it a viable option for web on Linux servers, and even though they dominate desktop, desktop itself has competition from 1) the browser (see: web apps) and 2) phones/tablets (there’s zero difference between a laptop and a tablet with a keyboard). They’re playing nice because they know they’re an underdog and can’t afford to act otherwise.

                        Of the three platforms (browser/desktop/touchscreens), the Browser is most controlled by Google, and phones/tablets are most controlled by Google. This conveniently lines up with the “Google is the new Microsoft” meme.

                    2. 2

                      I also think Microsoft has done way better, and I really think they are likely to continue supporting and embracing open source. It seems like the company culture has shifted in a very fundamental way.

                      That being said, we should still operate under the assumption that they won’t. Trust, but verify. Same reason you should be wary of signing a CLA that assigns copyright, even if you really, really trust the company the CLA comes from.

                      1. 1

                        I used to know a ton of people running Linux as their primary OS, and now almost everyone’s on macOS and WSL. Perhaps most people don’t care much about the underlying principles, as long as they get their work done.

                        My main principle was always to get certain things done. For a long time (say, from the year 2000 to 2018) Linux was absolutely number one for that, for me. Now it’s Apple, but by a small margin.

                        I’m fairly certain that it will never be Windows except for games. And that’s becoming a small margin as well.

                        From the article:

                        As you can see there’s nothing fancy about it. I wanted to build a decent workstation, not a gaming rig. Still, I opted to get a decent discrete GPU, as there were a few PC games that I was hoping to eventually play (StarCraft II, Tomb Raider, Diablo III, etc).

                        So this is absolutely and obviously a gaming rig :)

                      2. 2

                        I think that asking people to pay a cost (in time, complexity and frustration) to try and match their desktop workflows from Mac OS or Windows in Linux is a fool’s errand, and in addition, the “real enemy” isn’t Microsoft (Windows) or Apple, but rather Google/Amazon/Microsoft (Azure/Github). I think the real challenges to software freedom are in confronting the big SaaS providers, and I would love to hear what the various freedom advocates think we should do about that.

                        1. 1

                          big SaaS providers

                          What do the big SaaS providers have to do with the state of linux on the desktop?

                          1. 2

                            Not much! But they have a lot to do with the state of software freedom, or rather, the lack thereof.

                      1. 8

                        I’m a staunch systemd detractor. I support this project; it’s nice to have options!

                        It’s nice to see supervisor inits making their way into BSD; I wonder how it works with the license? surely a fork is GPL’d? Thus it could never be shipped by default.

                        I’m glad they didn’t take the journal format, but I wonder if they could take inspiration from Solaris SMF, in that the supervisor init tracks the log file (or can output STDERR/STDOUT on behalf of the process to a log file).

                        My anti-systemd views:

                        Contrary to those who wish to misrepresent “systemd haters”: I (and I suspect many others) don’t actually hate many of the concepts behind systemd.

                        I dislike systemd because it is difficult to debug, rolled a lot of it’s own reimplementations of things in difficult to debug ways (let’s do DNS over DBUS!) and claims to be modular while having tight integration to things making it an all-or-nothing deployment in most circumstances.

                        I dislike systemd because it removes the possibility of something better coming along later, because any potential reimplementations of an init will need to be a very large codebase and have to emulate quirks and odd-behaviours of systemd.

                        1. 13

                          I dislike systemd because it is difficult to debug

                          Considering that init scripts are also difficult to debug, this is just a sidegrade at worst.

                          1. 16

                            OpenBSD’s init scripts are quite a bit simpler than the tangled mess that was the norm on linux (Slackware being the notable exception). They’re almost nonexistent compared to systemd.

                            For example, here’s a typical openbsd init script:

                            $ cat /etc/rc.d/smtpd
                            #!/bin/ksh
                            #
                            # $OpenBSD: smtpd,v 1.7 2018/01/11 19:52:12 rpe Exp $
                            daemon="/usr/sbin/smtpd"
                            . /etc/rc.d/rc.subr
                            rc_reload=NO
                            rc_cmd $1
                            

                            There’s about 300 lines of support code in rc.subr, mostly around parsing the command line arguments:

                            https://cvsweb.openbsd.org/src/etc/rc.d/rc.subr?rev=1.136&content-type=text/x-cvsweb-markup

                            I could post the entire openbsd init system in this one comment – it doesn’t hit the size limit. I won’t, because it’s just a bit antisocial to paste a wall of text just to prove a point.

                            1. 7

                              init scripts have a great deal more determinism and a radically smaller set of moving pieces.

                              1. 7

                                It’s not like SysV init and systemd are the only two options.

                                I actually really dislike SysV init, always have. OpenRC is the worst part of Alpine by far. But at least I can debug them. If I run in to an issue with systemd … there’s basically no chance I can debug it.

                                Here’s an actual systemd issue I ran in to, and here’s the patch to fix it. There is no way I would have been able to figure this out without at least a full day of work, if not more.

                                1. 6

                                  Systemd is worse to debug though. It’s compiled & has a non-deterministic dependency graph.

                                  I agree somewhat that bash is intimidating but it’s not compiled and is definitely easier than C for new users; but a few things stand out:

                                  1. Your comment is a false dichotomy because there already existed inits which do not use shellscripts at all (runit, SMF)

                                  2. you don’t have to use bash at all, you could invoke any interpreter, Perl/Python/Ruby (I have done this)

                                  3. bash -x can be used if you’re stuck

                                  4. you can modify many behaviours as a user, how easy is it to modify systemd? There are things which are easy, but a lot of things are quite a bit harder. (Arguments against HCL/Yaml for systems management apply in their entirety here).

                                  And anyway this is arguing about the init again, and there are some good ideas. My main gripe about the init is that it positions itself in a place that’s hard to replace and that it is more difficult to debug for power users.

                                  My larger issues surround systemd as an ecosystem.

                                  1. 7

                                    I’m a bit confused about…well, honestly, most of your points.

                                    1. systemd the tool is compiled, but the units are all interpreted. Or, if you prefer this phrasing: bash is compiled if systemd is compiled.
                                    2. runit is pretty much literally just shell scripts, so I don’t get that comment, either. And while you’re right in a strict sense that SMF isn’t shell scripts, they largely just describe when and how to execute arbitrary command line apps, which is basically also what systemd does.
                                    3. bash -x can be used if you’re stuck only if the scripts involved do something more than exec /sbin/foo -a -b -c, and that (well, along with something like chpst) is often all there is to such a shell script, anyway
                                    4. I’d need some (any?) specific examples of things that you find easier to modify as a user than via systemd. Things I can trivially do in systemd that I can’t in native init include e.g. providing access to some root-owned files while not running the process as root or providing generic access, doing equivalents of privilege dropping even if the executable does not itself support it, trivially having inetd-style launch-on-connection/file-action/etc., and more. You absolutely can do these without systemd (often using things like inetd), but they’re not trivial, and I cannot personally think of an inverse.

                                    I have a very complicated, at best ultimately neutral, attitude towards systemd, but I’d like to make sure we’re all on the same page about what systemd does and does not do, and how it does and does not work, so the discussion is actually valid.

                                    1. 5
                                      1. I think the simple answer here is that you can’t even do conditionals with the .ini file format.

                                      2. runit can run shell scripts, or you can just call a command to run. It’s supervised so you don’t have to care about forking/logging

                                      3. if exec /sbin/foo is what is failing you can run it in runlevel 3 and get a pretty error message.

                                      4. Trivially: checking that the environment is sane before running commands. There are still systemd units which call bash scripts because you don’t want to clobber data in some situations. Starting PostgreSQL for the first time for example if the datadir is empty or scanning for LVM volumes properly before mounting gets easier if you control it.

                                      Like I keep saying, systemd the init has parts that beat out bash for sure, it’s easier as a user until it breaks, when it breaks you’re hopelessly fucked though (and I lived through the early days of systemd on fedora so I’m aware of just how fucked you can be).

                                      It’s interesting that I this thread has become a defence of bash when really I don’t hold much love for bash; and this is what most people who like systemd prefer to talk about too… I don’t hate systemd because it is not Turing complete or that it’s not bash or whatever… What I do hate about systemd for is the almost closed off ecosystem due to tight integrations, the fact that it’s default everywhere and in some cases can’t even be removed and lastly the awful code/attitude of the project generally.

                                      You can’t tell me that it’s “as debuggable” or that anything you’ve said isn’t a false equivalence, for instance if you’re decrying “exec” as being obtuse and undebuggable then systemd only does that anyway!

                                      1. 3

                                        (Obligatory disclaimer: I’m not a systemd “fan”, but I use it and like some of the features. This ain’t an anti-systemd rant :-D).

                                        An example from a while ago. I worked on a tiny gizmo that ran Linux. Yocto, being the steaming pile of sh quirky array of tools that it is, generated some weird image that systemd-fsck really wanted to fsck each time, for some mysterious reason.

                                        This was early at boot time, and systemd-fsck provided pretty much no diagnostic info at all at the time (I don’t know if it’s changed in the meantime).

                                        How do you debug this?

                                        The best I could figure out was to get a custom systemd build up and debug it by printf, pretty much the way I’d have done it if it were all shell scripts, except with an extra, and pretty lengthy compile, generate image, burn to flash cycle in-between. If it were all shell scripts, I could’ve at least done it on-device.

                                        I’m not saying this single incident would justify returning to shell scripts, that’s really not the case. It’s just an example of something that’s now a little harder to debug than before.

                                    2. 6

                                      Considering that init scripts are also difficult to debug, this is just a sidegrade at worst.

                                      Depends on the OS, the BSD’s all use similar rc.d frameworks for their init scripts, so they’re almost always declarative and fairly trivial to debug with standard unix utilities.

                                  1. 7

                                    What an interesting read, and a delightful site. I remember in the late 90’s we had an absolute mountain of inexpensive NE2000 clones (mostly ISA) and happily used them with Windows and OS/2 but quickly gave up trying to get them to work reliably with Linux. I didn’t know why at the time, but this really explains a lot. I think there was some reasonably ubiquitous 3Com PCI card we settled on for the Linux machines.

                                    1. 6

                                      probably the 3com 3c509, which was the Adaptec AHA-1542 of network cards.

                                      1. 1

                                        I think that was it! Good memory.

                                      2. 1

                                        Yup. I was just starting to use Linux professionally at the time, and remember being delighted to discover a box of old 3Com PCI cards at work, because of their great Linux support at the time. I think it was the Etherlink III?

                                        1. 1

                                          Sounds reasonable.

                                          Like you I came into possession of a box of old 3com cards in the late 90s and I think I used them for many years until I switched to 100MBit

                                          And the amount of RTL8029 that died after a few weeks was staggering, whereas the RTL8139s worked perfectly fine. (Or maybe I am mixing it up and the 8139s were bad and the 8029s had worked fine, but surely one of those 2). This is something the article doesn’t mention (or if I got it wrong, then 8139 isn’t an NE2000) and maybe our local bunch of LAN party goers had extraordinarily bad luck or the batch of Realtek cards sold here were all flaky, but they were cheap and we always had a few spares because they died all the fricking time. If you had 20 people for a weekend of LAN party you could bet that one person had to switch to a new card before the event was over, so I 100% do not believe in software issues here.

                                      1. 19

                                        I think under-appreciated aspect is that Rust not only prevents safety issues from being exploitable, but in many cases prevents them from happening in the first place.

                                        Contrast this with C where safety efforts are all focused on crashing as fast as possible. Things are nullable, but you get segfaults. Buffers are unsafe, but you have crashes on guard pages and canaries. Memory management is ad-hoc, but the allocator may detect an invalid free and abort.

                                        Rust in some places ensures safety by panicking too, but it also has plenty of tools that guarantee safety by construction, like move semantics, borrowing, iterators, match on options and results. So the bar is higher than merely “not exploitable because it crashes”. It’s not exploitable, because it works correctly.

                                        1. 10

                                          Interestingly, “crash early, crash often” is actually AFAIU an approach that can also lead to really robust software when properly embraced, as in Erlang. Personally I’m not convinced C is a particularly exemplary follower of this philosophy, at least as seen in the wild. With that said, I sometimes wonder if this isn’t something of a blind spot for Rust - i.e. stuff like cosmic rays (which I read start becoming noticeable at some scales), or processor bugs and attacks based on them. Maybe some of those risks can be mitigated with stuff like ECC memory? I’m certainly not an expert in this area FWIW, far from it. Just when thinking, I sometimes wonder if the Erlang philosophy is not the winner here in what it can achieve in the biggest horizon of robustness/resiliency (?)

                                          1. 7

                                            Rust has the “crash early” philosophy too (asserts, indexing panic, overflows can panic), but it just doesn’t need it as often at run time. You wouldn’t want to crash just for the sake of crashing :)

                                            Rust has all of C’s protections too. They’re added by LLVM, OS, and hardware.

                                            1. 20

                                              Erlang’s “Let It Crash” philosophy is more than just ‘die a lot’ – the other part is that, recognizing that software can fail for a wide variety of reasons but that those reasons are frequently sporadic edge cases, you can get huge operational wins by having an intentional and nuanced system of recovery in-platform.

                                              In practice what this means is that in Erlang/OTP, you frequently have tens, thousands, or millions of concurrent processes, as you might in an OS. Many of these processes are executing business logic, etc. But some of them are ‘supervisor’ processes, which detects when one of the processes it is monitoring has died, and then attempts to restart it (perhaps with a maximum number of attempts in a given time period). This is recursive; for complex applications you might have supervisor trees that are several layers deep.

                                              The benefit here is that you start by writing the golden path. And then, sometimes, you just stop. Get illegal JSON input? Explode. Get an HTTP request you didn’t expect? Explode. Frequently, pragmatically, you don’t need to write the code that handles all of the garbage cases if your supervision tree is solid enough and your lightweight processes start ultra fast.

                                              This philosophy has downsides – if the processes are carrying a large amount of important internal state, then sometimes them dying can be inconvenient because resurrection might involve an expensive rebuild step. So you need to pay more than the usual amount of attention to the stateful/stateless boundaries.

                                              Rust at one point had this as a core idea, but abandoned it for, in my opinion, poor reasons. And now lands up grappling with janky concurrency coloring problems, as it unfortunately appears Zig will too.

                                              1. 9

                                                Rust at one point had this as a core idea, but abandoned it for, in my opinion, poor reasons.

                                                The OTP monitoring system seems really really cool. However rust abandoned green threads for a very good reason: performance. When the goal is to be able to maximize performance, and compete with C++, you can’t exactly ask for heavy runtime with reduction counters and all the bells and whistles of BEAM, useful as they are.

                                                The “coloring problem” caused by async stems from the same root causes: you can’t really have resizable stacks and lightweight threads in a language that is supposed to be able to run without even a heap allocator (“no-std” in rust parlance). That’s better left to higher-level languages like java or Go (or python if they had made less bad choices).

                                                1. 5

                                                  Here’s a more detailed explanation by Graydon Hoare, the original creator of Rust.

                                                  In short: Rust’s removal of green threads was for two reasons: 1) performance (as you mentioned), 2) difficult interoperation with C. Given Rust’s design constraints, including that you shouldn’t pay for what you don’t use, and that interoperation with C is expected to be easy, this approach didn’t work for Rust.

                                                  Edit: Replaced link to thread with a link to a collection, as Twitter’s default threading makes it easy to miss the second half.

                                            2. 5

                                              Crash-early is fine, as long as the process has a supervisor process that promises to take care of restarting it. That’s the part that seems missing in a lot of systems (in C or otherwise.) Often it just seems kind of ad-hoc. Having implemented some IPC in C++ in the past using POSIX APIs, I remember it being nontrivial for the first process to handle the child’s death (but I may be misremembering.) Its certainly not something done for you, the way it is in Erlang.

                                            3. 4

                                              Things are nullable, but you get segfaults.

                                              If you are lucky. Note that this isn’t guaranteed and doesn’t always happen.

                                              1. 1

                                                Yes, the worst part is when something overwrites some other (valid) memory, causing an error when that memory is next accessed (or worse no error at all). Pretty much your only recourse at that point is to whip out hardware watchpoints (which IME tends to be buggy and tank performance).

                                            1. 2

                                              I adored Delphi, especially back in the Delphi 5 days – developing code for Windows at the time was grotesque, and Delphi made it actually delightful. Unfortunately, their sales/pricing strategy went crazy around the time they decided to refocus on ‘enterprise’ clients, the quality dropped, the focus went hazy.

                                              As a young developer I bought a Delphi license for $79, if I recall correctly.

                                              Today you can get Delphi for the low low price of just $1,183 for the first year.

                                              1. 4

                                                But if we actually read what economists have to say on how hiring markets work, they do not, in general, claim that markets are perfectly efficient or that discrimination does not occur in markets that might colloquially be called highly competitive.

                                                If the bar is perfection, then there is no limit to the number of “fixes” that will be proposed.

                                                We can fix this, if we stop assuming the market will fix it for us.

                                                By enacting more laws, or how exactly?

                                                1. 7

                                                  If the bar is perfection, then there is no limit to the number of “fixes” that will be proposed.

                                                  I guess that’s true, and I guess a good thing. Or should we not always seek to improve?

                                                  1. 2

                                                    I agree with this, but I don’t think our rhetoric is sustainable. It’s far too toxic and divisive and progress demands cooperation; I think this toxicity and steamrolling to create change is creating a debt of divisiveness that will prevent us from progressing in the future. We need to figure out how to advocate for progress without being utterly hateful–people need to stop using “fighting injustice” as a cover for their personal vendettas against individuals and groups (political parties, races, genders, etc).

                                                    1. 4

                                                      We need to figure out how to advocate for progress without being utterly hateful–people need to stop using “fighting injustice” as a cover for their personal vendettas against individuals and groups (political parties, races, genders, etc).

                                                      Taking your comment at face value, it is a distortion of a hallucinatory magnitude to characterize socially progressive movements – which I assume you are referring to through the fog of plausible deniability – as “divisive”, “hateful”, and having a “personal vendetta” against groups defined by “race” and “gender”. Taking for example the movement for racial justice in the US, compare a near half millennium of violent racial oppression to the overwhelmingly peaceful forms of protest across the US, and ask yourself whose toxicity, divisiveness, and vendettas against groups should be considered worthy of your critique.

                                                      1. 3

                                                        I can’t disagree more strongly. The canonized authors of the movement publicly write things like “White identity is inherently racist” (note that this is a quote from DiAngelo’s best selling book) and talk about racism incurable in white people (whites are irredeemable) and kafka trap people (“white fragility”–if you denounce the term you’re only doing so because of your own white fragility, same with “internalized racism” if the objector is a minority) and otherwise go to remarkable lengths to support the primacy of race. They redefine “racism” such that white people simply participating innocuously in their own culture is inherently racist and consequently evil and not only that but colorblindness–literally the opposite of ‘racism’ as the term has historically been defined–is also racist. I don’t see how this can be anything other than hateful and divisive and racist (per the traditional definition).

                                                        (And for the “So what? Words change meaning” crowd, the significance is that the term isn’t the thing that carries the moral weight; it’s the meaning–as a society we agreed that racial prejudice and hate were evil–they are evil whether “racism” as a term refers to those things or their opposites. If someone inverts the meaning of the term–and I think this is a fair characterization–and then calls themselves “antiracist”, they are necessarily opposed to justice).

                                                        Taking for example the movement for racial justice in the US, compare a near half millennium of violent racial oppression to the overwhelmingly peaceful forms of protest across the US, and ask yourself whose toxicity, divisiveness, and vendettas against groups should be considered worthy of your critique.

                                                        I’m concerned about the parallels between the former and this new ideology (which condemns the very liberalism that so significantly reduced racial oppression in so short a time). Notably the primacy of race over the individual, the eagerness to regulate speech and thought, the propensity to celebrate or rationalize political violence, the promotion of segregationist policies, the newspeak rhetorical devises, and so on. Liberalism condemns the far left and the far right at once.

                                                        1. 2

                                                          The canonized authors of the movement publicly write things like “White identity is inherently racist” (note that this is a quote from DiAngelo’s best selling book) and talk about racism incurable in white people (whites are irredeemable) and kafka trap people (“white fragility”–if you denounce the term you’re only doing so because of your own white fragility, same with “internalized racism” if the objector is a minority) and otherwise go to remarkable lengths to support the primacy of race. They redefine “racism” such that white people simply participating innocuously in their own culture is inherently racist and consequently evil and not only that but colorblindness–literally the opposite of ‘racism’ as the term has historically been defined–is also racist. I don’t see how this can be anything other than hateful and divisive and racist (per the traditional definition).

                                                          You realize that works like these are written from a critical perspective, right? They’re intellectual and/or sociological analyses, not literal dictates.

                                                          1. 3

                                                            They seem to be building a racial worldview that is seized upon en masse, so I take little comfort in their perspective or analytical nature.

                                                          2. 2

                                                            If you’re interested books on racial justice, Angela Davis and Michelle Alexander are good places to start. Verso books publishes a lot of on this subject too. I think you’ll find many thinkers who are less concerned with what you may perceive as a certain moralizing political correctness, but rather more interested in understanding and dismantling systems of violent injustice. Think policing, jailing, housing, education. This is what I’ve referred to above vaguely as “the movement for racial justice”. Not to be dismissive, but books like “white fragility” are IMO more like beach reading for guilty white folks. Serves a purpose and may be a nice book, but I don’t think anyone would refer to it as “canon”.

                                                            1. 2

                                                              I think we’re exposed to different angles of this movement. I see a lot of people (white and black) boosting Kendi and DiAngelo and their ilk, but you’re the first who has recommended Davis or Alexander. I’ll have a look. I don’t think Kendi or DiAngelo are actually interested in “racial justice” in any meaningful way, but rather trying to advance an abstract theoretical framework (or perhaps an incoherent word salad that aspires to look like a framework) that indicts groups and individuals they don’t like irrespective of whether or not those people have anything to do with the disparate outcomes. I fully believe there are lots of genuine people involved in the movement, but the part of the movement that is being seized upon by the media and corporations seems to strictly be the critical race theory part (they recommend the same authors, use the same jargon, etc).

                                                              1. 2

                                                                trying to advance an abstract theoretical framework . . . that indicts groups and individuals . . . irrespective of whether or not those people have anything to do with the disparate outcomes

                                                                But, like, this is entirely correct! Structural racism means people don’t have to actively do racist (little-r, micro scale) things to be part of a racist (big-r, macro scale) group.

                                                                The conversation is about understanding this distinction and it’s effects so they can be corrected, to reduce suffering — not about amplifying the distinction so it can be weaponized, to increase suffering. I understand why you might think otherwise, but that conclusion requires believing the entire conversation is happening in bad faith, and there’s just no justifiable way to reach that conclusion, the evidence and Occam’s Razor don’t support it.

                                                                1. 1

                                                                  Structural racism means people don’t have to actively do racist (little-r, micro scale) things to be part of a racist (big-r, macro scale) group.

                                                                  Then this definition of “racist” can’t carry any moral value, and anyone who assigns moral value to this definition is by definition a bigot and if the group in “part of a racist group” refers to a race then the person who assigns moral value to the term is precisely a racist in the original sense of the term—one who believes a person is guilty for no reason other than the color of their skin. This is hateful.

                                                                  1. 2

                                                                    I can’t help but be left with the overall impression that you’re trying to win a game of 7-dimensional chess which is suspended above our planet. I enjoyed introducing you to Davis and Alexander, and at this point I’d suggest that you pick up some of those books because there aren’t many other ways I think I can re-state the same point, one that @peterbourgon has also expressed, and which is hammered home in those works. I don’t mean to tell you what to think, but history makes the fact of systemic injustice pretty uncontroversial. It seems that rather than confront these systems, you’d prefer think of racism as a personal choice made by context-free actors. I don’t mean to shut down discussion, but I have said what I could and the information is out there for you to engage with if you choose to.

                                                        2. 4

                                                          There has been a lot of hate, frankly, disguised for decades as civil discourse and apparently ordinary polite society behaviour. While some of the apparent tone of recent movements is appreciably different, and approaches a fever pitch in cases where people are at the end of their rope due to continuing maltreatment, I think it is disingenuous to paint the pushing back as somehow more hateful than what’s being pushed back on.

                                                          1. 2

                                                            There has been a lot of hate, frankly, disguised for decades as civil discourse and apparently ordinary polite society behaviour.

                                                            There’s also a lot of people who call civil discourse ‘hate’ as a way to shut down differing points of view.

                                                            While some of the apparent tone of recent movements is appreciably different, and approaches a fever pitch in cases where people are at the end of their rope due to continuing maltreatment, I think it is disingenuous to paint the pushing back as somehow more hateful than what’s being pushed back on.

                                                            From my vantage point, I see a lot of people being slandered, canceled, and even assaulted for living their ordinary lives and failing to toe a particular ideological line. These aren’t hateful people and many of them are themselves minorities; if they knew what policy would fix various racial disparities, they’d support it (e.g., IIRC a majority of even Republicans support police reform–there’s clearly more good will/faith out there than we’re lead to believe). They simply don’t buy the far-left newspeak rhetoric and extreme and frankly idiotic solutions (“tear down capitalism!”, “defund police!”, etc).

                                                            Further, your characterization is that the bad actors are presumably minorities at the end of their ropes, but the people I see behaving the worst in this regard are very often white and almost uniformly privileged people, often with lofty positions in media or universities. Similarly there are many well-behaved people of all races and positions. There’s not a strong racial signal as far as I can tell (although you wouldn’t know it from the mainstream media).

                                                            I think you and I have different positions, and that’s fine. I’m sure mine is skewed, and I’m always trying to understand better. Hopefully in time people with views similar to yours and people with views similar to mine will come to a more mutual understanding, but of course that’s dependent on a healthy debate.

                                                            1. 4

                                                              There’s also a lot of people who call civil discourse ‘hate’ as a way to shut down differing points of view. From my vantage point, I see a lot of people being slandered, canceled, and even assaulted for living their ordinary lives and failing to toe a particular ideological line.

                                                              Something I have noticed from a lot of conservative-leaning Americans is the tendency to latch onto the idea that someone might address their behaviour as somehow being the gravest sin, far worse than the shitty behaviour itself. Free speech doesn’t mean free from consequences!

                                                              Communication is certainly a two way street, but the “differing views” stuff is frankly pretty exhausting. The paradox of tolerance is a pretty tangible phenomenon, as it turns out. If you have a pattern of poor behaviour, other people are welcome to – and should! – point it out, especially when the transgressors are powerful people. The religious right have been doing this in their own way for years, harassing advertisers and TV networks, and politicians; organising boycotts and making a racket, to shut down TV shows or laws or organisations that they believe are offensive.

                                                              In another thread, you said:

                                                              They redefine “racism” such that white people simply participating innocuously in their own culture is inherently racist and consequently evil

                                                              I am a white person from Australia, where we have our own unfortunate, regrettable history. There are aspects of what I imagine you’re defining as “white” culture (whatever that is) that are indeed quite horrid. By “simply participating” in modern US society you (and I) are utilising a pile of wealth that was created through colonialism, and slavery, and many other deeply awful, violent, destructive aspects of our shared societal history. On top of that, many societal institutions (like the police, or the fact that wage theft is not a crime) are structurally configured to protect certain groups of people at the often violent expense of other groups.

                                                              By pretending it isn’t something we all need to deal with urgently, that we have the luxury of waiting for someone to come along and debate us in a tone of which you approve, you are taking a fundamentally regressive stance. There is no move on this chess board that isn’t inherently a political decision, even though it might feel like your doing nothing and staying out of the way is somehow balanced or apolitical.

                                                              a majority of even Republicans support police reform–there’s clearly more good will/faith out there than we’re lead to believe

                                                              I will believe it when I see it! Republicans have periodically had concurrent control of the House and the Senate and the Executive and a lot of the courts and statehouses in this country. They have had ample opportunity to drive forward any “reform” that they felt would mean less people are oppressed, harmed, killed. It isn’t at all surprising to me that people are deeply unhappy with the status quo.

                                                              1. 1

                                                                Something I have noticed from a lot of conservative-leaning Americans is the tendency to latch onto the idea that someone might address their behaviour as somehow being the gravest sin, far worse than the shitty behaviour itself. Free speech doesn’t mean free from consequences!

                                                                Take comfort in that I’m not a conservative, but a moderate liberal. Your observation would indeed be frustrating, but that’s not what I’m doing here. My claim is that ordinary white folks and increasingly minority folks who are just going about their business are maligned by the progressive left. We’re not talking about “shitty behavior”, we’re talking about something much closer to “having white skin”. Note that this is not worse than what many minorities endure; however, it is unjust to slander, malign, and cancel people, and further it distracts from progress with respect to improving minority outcomes. There certainly is no dichotomy in which we much choose between anti-white racism and anti-minority racism; morally you can’t be opposed to racism with race-based caveats (e.g., “except against $race”) but practically you’ll very likely create a lot more anti-minority racists by perpetrating anti-white racism.

                                                                Communication is certainly a two way street, but the “differing views” stuff is frankly pretty exhausting.

                                                                Agreed; it is exhausting; however, to be clear, “differing views” means we need to work to understand each other. It’s not some morally relativistic argument that you must accept my viewpoint.

                                                                The paradox of tolerance is a pretty tangible phenomenon, as it turns out. If you have a pattern of poor behaviour, other people are welcome to – and should! – point it out, especially when the transgressors are powerful people.

                                                                It may be a tangible phenomenon, but without a criteria for what is “tolerant” and “intolerant” the principle is easily abused to give anyone license to abuse any other party simply by defining intolerance such that they are intolerant. This is exactly what we see with many progressives (especially intellectuals) who seek to change the definition of racism because it doesn’t target the right people (white folks, including “colorblind” white folks, mostly). So we’re not talking about “transgressors” except insofar as the transgression is having the wrong skin color.

                                                                The religious right have been doing this in their own way for years, harassing advertisers and TV networks, and politicians; organising boycotts and making a racket, to shut down TV shows or laws or organisations that they believe are offensive.

                                                                And we eventually collectively shut them down in the name of liberalism. The religious right lost every significant fight–abortion, sex and violence on TV, gay marriage, etc (and while it did get Hobby Lobby, it’s not a significant issue and it won it because of liberalism).

                                                                I am a white person from Australia, where we have our own unfortunate, regrettable history. There are aspects of what I imagine you’re defining as “white” culture (whatever that is) that are indeed quite horrid.

                                                                I don’t think there are, but we should talk in concrete detail about what they might be. I think there certainly were elements of “white culture” which were horrid, but I think we largely expunged them (or to be precise, there are still individual racists, but they aren’t allowed to express their views in society).

                                                                By “simply participating” in modern US society you (and I) are utilising a pile of wealth that was created through colonialism, and slavery, and many other deeply awful, violent, destructive aspects of our shared societal history.

                                                                Granted, but this is true of all Americans (including minorities) to widely varying degrees. This has left white people with more money on average than black people (whites are more likely to have wealth privilege), and I’m pretty open to reparations or some other ideas for addressing this. I genuinely don’t know what the right answer is, nor do the overwhelming majority of white folks; however, I don’t think that gives progressives (or leftists or whichever term you prefer) any license to abuse them for their race.

                                                                On top of that, many societal institutions (like the police, or the fact that wage theft is not a crime) are structurally configured to protect certain groups of people at the often violent expense of other groups.

                                                                Yeah, this is real white privilege. We need to understand the extent to which this is a problem and understand its dynamics in order to solve it properly. We need trustworthy academic and media apparatuses (even if they are on “the right side”, Americans need to be able to trust that these institutions are asking questions on their behalf)–which means we need to reform or retire our concept of activist journalists and academics.

                                                                By pretending it isn’t something we all need to deal with urgently, that we have the luxury of waiting for someone to come along and debate us in a tone of which you approve, you are taking a fundamentally regressive stance.

                                                                It’s precisely because the problem is urgent that we can’t afford to use the moment as an opportunity to exercise our personal hatred toward whites or conservatives or otherwise stroke our own enlightened egos. We need to build coalitions and simply wishing that people would take our abuse and still be on our side is naive at best (the less-than-charitable view is that those who heap the abuse don’t actually want circumstances to improve; they like the moral landscape because they feel it gives them moral license to heap their abuse without actually suffering social consequences for doing so). People who sabotage this coalition building are obstacles that we can’t afford to ignore.

                                                                will believe it when I see it!

                                                                Behold

                                                                You can debate whether it will be effective or whatever, but they have a proposal and I can’t seem to find the poll, but an overwhelming majority of Republican voters support police reform (this being the motivating factor for the proposal).

                                                                Republicans have periodically had concurrent control of the House and the Senate and the Executive and a lot of the courts and statehouses in this country. They have had ample opportunity to drive forward any “reform” that they felt would mean less people are oppressed, harmed, killed. It isn’t at all surprising to me that people are deeply unhappy with the status quo.

                                                                As have Democrats. Biden’s ‘94 crime bill wasn’t exactly friendly toward black Americans, nor was Hillary’s famous thinly veiled “superpredator” remark. But we can’t let partisan bickering distract us.

                                                              2. 2

                                                                There’s also a lot of people who call civil discourse ‘hate’ as a way to shut down differing points of view.

                                                                “Different points of view” is a phrase that can be weaponized to paper over categorically different things.

                                                                Whether or not the Laffer Curve is an effective means to guide tax policy are different points of view, and we can have a civil discourse on the subject.

                                                                Whether or not transsexual women are mentally sick men are not merely different points of view. One position is hateful; civil discourse is impossible because that position is in its nature un-civil.

                                                                Bringing it back on-topic: whether fewer women exist in programming occupations because of hiring bias, or because of some innate, gender-based distaste for science or math or whatever, is a gray area. It’s possible to have this discussion in a civil way, but it requires considerable attention to context. For example, not every forum is appropriate for the discussion. It would be inappropriate to have this kind of debate on a mailing list of a technology company, where women engineers at the company would be justifiably aggrieved by colleagues arguing for the “innate” position. Insisting on having this discussion in that context is hateful, to some degree.

                                                                (n.b. the correlation of “differing points of view” that are actually hateful to a specific American political stance/party isn’t evidence of political censorship, it’s evidence of regressive and hateful politics.)

                                                                1. 0

                                                                  I strongly disagree. For instance, it’s not a gray area at all to debate the cause for why there are fewer women in programming—this is an empirical question, and moreover only a minority of women are offended by either position (indeed there’s no reasonable cause for offense). This doesn’t fit any reasonable definition of “hate”. I’m strongly of the opinion that “hate” is the weaponized term, used by a specific group of bad faith actors to suppress reasonable debate as previously discussed. I agree that this is evidence of regressive and hateful politics, but probably not in the way you mean. Anyway, I don’t really enjoy rehashing these same largely semantic debates over and over, so I’ll leave you to the last word.

                                                                  1. 3

                                                                    there’s no reasonable cause for offense [for] women engineers [witnessing] colleagues arguing for the “innate” position [in a debate in the office on] whether fewer women exist in programming occupations because of hiring bias, or because of some innate, gender-based distaste for science or math

                                                                    Your claim kind of stands on its own here, I think.

                                                          2. 2

                                                            Or should we not always seek to improve?

                                                            Improving isn’t cost free. if the cost to implement a solution exceeds the fruit, it is not worth it.

                                                            1. 4

                                                              if the cost to implement a solution exceeds the fruit, it is not worth it

                                                              Well, that’s a truism, so I’m not sure how much insight it delivers. The issue tends to be an appropriate accounting of the benefit. For example, many of the advanced safety features on cars probably seemed “not worth it” by this formula at the time of their introduction or regulatory mandate, because it’s difficult to put an accurate value on future lives saved. Similarly, many of these discrimination-reducing measures could easily be seen as “not worth it” as it’s difficult to put an accurate value on the long-term benefits of more representative and diverse organizations.

                                                            2. 1

                                                              then there is no limit to the number of “fixes” that will be proposed.

                                                              I guess that’s true, and I guess a good thing

                                                              Depends on your appetite for another can’t-win, perpetual war. We are still fighting the wars on poverty, terrorism, and drugs.

                                                              I see two independent ideas in your comment:

                                                              1. seeking to improve oneself
                                                              2. seeking to improve others

                                                              1 is virtuous IMO. 2 leads to pesky authoritarian over-corrections.

                                                              1. 8

                                                                As an aside, I always find it fascinating how readily tiny incremental changes that are light years short of perfection get called pesky authoritarian over-corrections.

                                                                1. 0

                                                                  My comment was specifically about the risk of over-corrections, not tiny changes, that tends to follow from a zeal for improving other humans. Errors accumulate.

                                                                  1. 2

                                                                    Sure. When they’re errors. My point is that what you might call an over-correction someone else might call a tiny incremental change.

                                                                2. 5

                                                                  “seeking to improve others” leads to pesky authoritarian over-corrections? Do you find this to be true when you think of anything else besides gender or racial equality?

                                                                  1. 1

                                                                    I’m guessing you expect an answer other than “yes”, or perhaps you had hoped to enlighten a lower creature.

                                                                    Your reply (and others in this thread) quickly turned personal. Hmm.

                                                                  2. 2

                                                                    seeking to improve others . . . leads to pesky authoritarian over-corrections

                                                                    Well, that’s certainly one failure mode of any kind of policy of mandate from authority, and we should be careful to guard against it, but it’s hardly inevitable. More importantly, there is an upper bound to the amount of progress that can be achieved on a large scale via individual virtue and action alone.

                                                                    1. 1

                                                                      Even for part 1 it is not clear that it is always good. Why would becoming the best programmer in the world good, when it would take so much effort and time, which can be spent on enjoying yourself, if you are already a pretty good programmer that can command a pretty good salary. Diminishing return is a thing and self-improvement is not without cost.

                                                                  3. 14

                                                                    If the bar is perfection, then there is no limit to the number of “fixes” that will be proposed.

                                                                    Indeed, that’s exactly what a benefactor of a broken system would say. For excluded folks, there’s no cost in trying to change the system; they aren’t benefitting from it regardless.

                                                                    1. 1

                                                                      that’s exactly what a benefactor of a broken system would say.

                                                                      Okay, but is he wrong?

                                                                      1. 4

                                                                        About what? This?

                                                                        If the bar is perfection, then there is no limit to the number of “fixes” that will be proposed.

                                                                        Yes? No? I’m unfamiliar with any documented result that answers this question, so I’m going to go with maybe here. This is such a nebulously defined problem that I’m not really sure one can answer it. Fixes to what? Perfection where? How much effort does perfection take?

                                                                        My point was simple: it doesn’t matter what you think about perfection or fixes or the lack thereof. Disenfranchised people, throughout history, have agitated for franchisement. From the Roman Empire’s discrimination of Christians to the brutality of Belgian rule on the Congo. No matter the advantages of the system, the disenfranchised have sought to topple theirs. Advance a position with known disenfranchisement at your own peril.

                                                                      2. 0

                                                                        Indeed, that’s exactly what a benefactor of a broken system would say.

                                                                        While this is a fun argument, it’s not an actual one. Just because a bad entity would say something, does not make whatever is being said bad.

                                                                        For excluded folks, there’s no cost in trying to change the system; they aren’t benefitting from it regardless.

                                                                        They think they are benefitting from it. But predicting the future is hard, and regrets do happen.

                                                                        1. -1

                                                                          Indeed, that’s exactly what a benefactor of a broken system would say.

                                                                          If you have nothing to hide then you don’t need privacy, right?

                                                                          This is Christianity’s “original sin” concept, a cudgel used against anyone who questions the priest class.

                                                                          1. 4

                                                                            If you have nothing to hide then you don’t need privacy, right?

                                                                            I’m unclear what that has to do with my comment.

                                                                            This is Christianity’s “original sin” concept, a cudgel used against anyone who questions the priest class.

                                                                            I’m not sure what you’re talking about. What cudgel is this for what or for whom? I’m just trying to tell you that if you don’t find a solution acceptable by all parties, then disenfranchised people will understandably not care about your perspectives or your ideals. Telling them to be quiet in the name of a philosophical good is sophistry at best.

                                                                        2. 5

                                                                          By enacting more laws, or how exactly?

                                                                          The legal industry has Diversity Lab.
                                                                          They conduct policy hackathons, create policies to promote diversity, and report on the results.
                                                                          The Mansfield Rule is an example of one of their policies.
                                                                          Now in its third iteration, the Mansfield Rule Certification measures whether law firms have affirmatively considered at least 30 percent women, attorneys of color, LGBTQ+ and lawyers with disabilities for leadership and governance roles, equity partner promotions, formal client pitch opportunities, and senior lateral positions.
                                                                          102 large law firms have agreed to this rule and their compliance is assessed by third-party audits.

                                                                          There’s nothing to stop the technology sector from taking similar actions.

                                                                          1. 1

                                                                            Thanks. But those efforts are part of the free market, they aren’t state mandates. So this is an example of the market voluntarily experimenting with solutions.

                                                                            1. 2

                                                                              It’s a combination of voluntary actions and state mandates.
                                                                              The legal industry has been working on gender equity and diversity for decades.
                                                                              Law schools used affirmative action to admit gender-balanced classes in the 60 and 70s.
                                                                              Class-action lawsuits in the 1970s forced law firms to change their hiring practices.
                                                                              Diversity is also important to clients for legal services; Diversity Lab’s initiatives are backed by Microsoft, Starbucks, Bloomberg LP, and 3M.

                                                                              Edited to add the following text.
                                                                              Law firm diversity metrics are public and widely shared.
                                                                              The National Law Journal’s Women in Law Scorecard, for example, was released earlier this week.

                                                                          2. 7

                                                                            The majority of the article makes clear that perfection isn’t the bar. The point of using the word “perfectly” seems to be to address a specific disingenuous claim:

                                                                            1. Markets are competitive
                                                                            2. Unjustified discrimination is a competitive disadvantage
                                                                            3. Market forces in a competitive market must tend toward a perfect balance that squeezes out disadvantageous behavior
                                                                            4. Therefore, discrimination can’t be a significant factor in the market

                                                                            I’d reckon laws aren’t likely the point. It’s already illegal (in the US at least) to discriminate on most of the bases talked about in the article; from a policy perspective, a change in enforcement might help. But most likely, the change is going to have to be a cultural one. The sort of thing where enough people talk about this, and enough people agree that it’s not okay, that it’s almost impossible to be a member of the computer science community and not find yourself actively checking for this bias in your decision-making.

                                                                            1. 0

                                                                              But most likely, the change is going to have to be a cultural one.

                                                                              Culture, social change, blog posts, are all part of the free market. These discussions are poisoned with the common assumption that anything lacking a credit card transaction is somehow not part of economics.

                                                                              Has anyone considered that anti-discrimination laws may contribute to the problem? Hiring a protected class carries the perception of increased liability in terms of lawsuits, whereas hiring a non-protected class may carry less liability.

                                                                              Maybe the laws did their job and now it’s time to enter “phase 2”: remove special protections. That was the goal, wasn’t it? Note that discrimination on the basis of liability is different in origin though not effect. The laws never cared about origin, only effect.

                                                                              1. 6

                                                                                Conversely, I feel as if your claim is poisoned by the common assumption that anything lacking government intervention is somehow part of the free market. Maybe economics in general has broader applicability, but if we’re talking about market forces, the topics of our discussion are explicitly going to be things related to the accumulation of capital. Culture, social change, blog posts, and so on are only related insofar as they have value that can be expressed in monetary terms. Whatever the case may be, it’s empirically true that whatever value they currently have isn’t sufficient to change hiring behaviors. So either we need to change that value or we need to effect changes that cause people to act for reasons unrelated to satisfying market pressures.

                                                                                Your second argument might be correct (I don’t know), but if it is, it’s a red herring. You can’t argue that discrimination doesn’t exist in the market because anti-discrimination laws are such a poor remedy that they create incentives to discriminate. The original article is addressing a single, specific claim - that it is economically impossible for discrimination to exist, because if it did companies would find competitive advantage by not discriminating until the market reached equilibrium. If you want to find a cause for why discrimination does exist, that’s a different thing.

                                                                                1. 3

                                                                                  Culture, social change, blog posts, and so on are only related insofar as they have value that can be expressed in monetary terms. Whatever the case may be, it’s empirically true that whatever value they currently have isn’t sufficient to change hiring behaviors. So either we need to change that value or we need to effect changes that cause people to act for reasons unrelated to satisfying market pressures.

                                                                                  This does not follow at all. Let’s say (although almost no one is explicitly calculating as follows) one is willing to hire men rather than women up to $1M of economic damage due to held value, and resulting inefficiency causes loss of $500K economic value. Also, social shaming (“culture”) causes $300K of economic damage. In this scenario, as you say, culture is empirically insufficient to change hiring. But it is simply incorrect to say the choice is either to change such held value, or to deploy non-monetary force. If social shaming intensifies 2x, the total damage reaches $1.1M and hiring changes.

                                                                                  1. 1

                                                                                    I might have miscommunicated - your example is exactly what I meant by changing the value of culture, etc.

                                                                                    1. 2

                                                                                      That must be the case. From what I can read, you and jmk are in agreement: quotes giving me such impression include “By enacting more laws?” and “market forces (which includes culture)”.

                                                                                  2. 3

                                                                                    Culture, social change, blog posts, and so on are only related insofar as they have value that can be expressed in monetary terms

                                                                                    It’s really simple why these are part of the free market: These things influence the reader, the reader’s thinking, and therefore they influence the reader’s spending.

                                                                                    1. 1

                                                                                      We agree. And since the existing influence on spending isn’t enough to force changes in hiring practices, then if different hiring practices are desired, the solution is either intensifying that influence, or relying on something other than economics, e.g. community norms.

                                                                                      1. 4

                                                                                        FYI, the entire point of contention is that community norms IS economics. That’s what jmk’s “common assumption that anything lacking a credit card transaction is somehow not part of economics” phrase is about.

                                                                                    2. 2

                                                                                      The original article is addressing a single, specific claim - that it is economically impossible for discrimination to exist, because if it did companies would find competitive advantage by not discriminating until the market reached equilibrium.

                                                                                      Framing the question as a binary (“perfect or not perfect”) is not meaningful and thus disingenuous. “Economically impossible” (assuming anyone used those words) is obviously a theoretical upper bound, since economics is dynamic (changes with time and context).

                                                                                      The meaningful question is whether market forces (which includes culture) tend to improve the situation. Are we going in the right direction or not?

                                                                                      1. 5

                                                                                        The claim the article argues against is explicitly a binary one - that the economic disadvantage of discrimination proves that discrimination can’t explain observations about women and minorities in the tech industry. If you agree that the economic effects are anything less than perfect, then you agree that discrimination can explain some of the observations, and you may agree with the article.

                                                                                        1. 4

                                                                                          I think dl and jmk are talking past each other, because dl’s article is mostly about diagnosis, and jmk is mostly concerned about solution. dl says observed disparity is not wholly explained by economics and it is likely explained by discrimination, and I think jmk agrees? (I agree.)

                                                                                          But to jmk (and to me), the important part is what to do about it. Existence of discrimination does not support any governmental intervention, since it is possible all government interventions are harmful. The thing is, I think dl also agrees. The article merely says “We can fix this, if we stop assuming the market will fix it for us”, it does not suggest or support any specific governmental intervention, it doesn’t even suggest or support governmental intervention is necessary.

                                                                                          To me, the whole debate is about what “market” means: which is boring terminological discussion. To dl, large scale social movement (aka jmk’s “culture”) is not part of the market, but to jmk, it is. So I think both agrees about the solution (mostly cultural, not legal), but disagree whether to call it market or not.

                                                                                2. -2

                                                                                  By enacting more laws, or how exactly?

                                                                                  “muh free market” isn’t the perfect solution, but a pretty good solution that’s very easy to implement. Women and minorities can get what they can get, nothing is stopping them. If the boys are bad, then just make a women only corporation, crush the market with your 20% reduced salary expense, and counter-discriminate the boys. that will show them….

                                                                                  No it’s not perfectly workable. But it’s really good. Trying to ‘fix’ the ‘injustice’ is like balancing a ping-pong on a paddle while blind folded. There’s no guarantee that if we fix the 20% gap, we are not subsidising women for their choices that we simply didn’t know about.

                                                                                1. 15

                                                                                  tl;dr: Dropbox & iCloud are proprietary bloatware, but syncthing isn’t.

                                                                                  1. 26

                                                                                    tl;dr: capitalism takes things that could be simple/straightforward and smothers them in branding and upsells

                                                                                    1. 10

                                                                                      looking at you, Firefox

                                                                                      1. 8

                                                                                        One day: “it’s here! Buy shares of FirefoxCoin while they’re cheap, and use them as micropayments to the certain genre of sites that Pocket overwhelmingly features”

                                                                                        1. 8

                                                                                          you just gave some precocious PM at Firefox an idea, goddammit

                                                                                          1. 3

                                                                                            Brave already exists.

                                                                                      2. 3

                                                                                        There has never been a similar behavior around smothering a tool in branding or upsells/spurious features in libre software. Systemd never happened, pulseaudio never happened, gnome3 never happened, firefox/pocket never happened, most client javascript frameworks never happened, etc.

                                                                                        I don’t disagree with you, but I think you’re missing a lot of the picture.

                                                                                        And honestly, if it weren’t for the continuous churn of developers looking to make a name for themselves or being bought into the zealotry, eventually the economics of libre might break down.

                                                                                        1. 5

                                                                                          Yeah, I’m not saying that free software and capitalism are mutually exclusive; just that this problem arises from capitalism, and when it occurs in free software it’s specifically because free software has fallen under capitalism’s influence.

                                                                                          My machine uses systemd, but it’s completely invisible to me. When I performed the upgrade that brought it in, there were no bright banners heralding its arrival. The only example of a program I’ve actually used that’s done an upsell is Firefox/Pocket, which is a case where the SV startup mentality has been applied to a free software project and caused that ickiness to seep in.

                                                                                      3. 4

                                                                                        Not only that, iCloud frequently fails to do the basic thing of exchanging files it’s supposed to :-|

                                                                                        https://discussions.apple.com/thread/8096570

                                                                                        I moved to syncthing as well after suffering from this. Too bad, iCloud could’ve been the simple solution when all you have is Apple devices.

                                                                                        When I went to open source >20 years ago, I did it mostly because the quality was higher already back then. Seems like even though the proprietary world has caught up some, this is still true.

                                                                                      1. 28

                                                                                        There’s a huge funnel problem for computer science at the moment. Go and Rust have some pretty serious evangelical marketing teams, but they are a drop in the ocean compared to the emergent ultramarketing behemoth that feeds JavaScript to the new developer.

                                                                                        Part of this is that JS is constantly “new and modern” – with the implication that it’s a bandwagon that you’ll be safe on, unlike some of the old cobwebbed bandwagons. Constant change and “improvement” is itself a safety generator.

                                                                                        Another part is that it’s so easy to get to hello, webpage. The sweet spot on the racket is enormous. Every computer including your phone comes with at least 1 and usually several JS interpreters. Frictionlessness drives adoption.

                                                                                        The problem is that JS is, violently, garbage for most purposes. It’s a local maxima that has essentially everyone trapped, including the next generation. It’s not clear how we escape from this one.

                                                                                        1. 17

                                                                                          I feel about JS similarly to the way I felt about the x86 ISA taking over the world. “A local maxima that has everyone trapped”, that caused billions of dollars of R&D to be diverted into clever hardware, code generation, psychological treatment for programmers, etc. (I think the last thing is a joke, but I’m not sure.) One could even draw a parallel between the modern “micro-op” architectural approach to bypassing literal x86 in hardware and the WASM approach to bypassing literal JS in the browser.

                                                                                          1. 12

                                                                                            The longer it goes, the more this talk gets correctly.

                                                                                            1. 1

                                                                                              I’m not sure any other ISA would have been better than x86 at the time x86 began to take off. Lots of companies were trying lots of things in the RISC world, and plenty of money was being spent on RISC hardware and compilers, and the x86 still began to take off. Intel had a lot of money? IBM had a lot of money, and IBM was working on RISC. HP had a lot of money, and HP was working on RISC. And so on.

                                                                                              1. 2

                                                                                                Of the obvious choices available at the time x86 began to take off (1984ish), I would say the 680x0 was a better choice, demonstrated by watching the parallel evolution of the two. At least the extensions to 32-bit and virtual memory seemed a lot more straightforward on the 68k. They both would have run out of steam and gotten weird by now, but I feel like it would have been less weird.

                                                                                            2. 2

                                                                                              It’s not clear how we escape from this one.

                                                                                              Simply wait. There are some better tools out there (for some value of the objective function “better.”)

                                                                                              We’ve moved on from C, C++ and Java, all of which have had a similar level of death grip. JS is not invincible. The more users it attains, the more it suffers problems of perception due to the wide variance of quality. This gives rise to new opportunities.

                                                                                              Really, I get a bit disappointed that everyone is content to rewrite everything every seven years, but, hey, it’s their life.

                                                                                              1. 0

                                                                                                I take strong offense at this proclamation of JavaScript as garbage. What kind of an opinion is that? If you don’t know JavaScript, don’t call out garbage. If you do know if well, you’ll see that it isn’t any more garbage then any other modern language for most purposes for which it is used - at least on backend.

                                                                                                The entire ecosystem has some issues, but every ecosystem does. And considering that node was created only a decade ago and has vastly more users then some “serious” things that exist for ages, it’s obvious that there’s something that it’s going correctly.

                                                                                                1. 29

                                                                                                  I take strong offense at this proclamation of JavaScript as garbage.

                                                                                                  You are offended on behalf of Javascript? People can dislike things that you like. It doesn’t do anything.

                                                                                                  1. 4

                                                                                                    Okay, inprecise choice of words on my part. I’ve wanted to state that I strongly disagree with his statement, english isn’t my first language and so I didn’t think every word completely through. I think you can still get the message. Be flexible a bit and you’ll understand it.

                                                                                                    1. 8

                                                                                                      I’m not sure what other languages you know, but compared to most popular languages:

                                                                                                      • Javascript has a weird type-system that doesn’t really pay off. Sure, they added inheritance recently (welcome to the 80s), but there are all kinds of inconvenient relics like having to do Object.keys(x) when in Python you can just do x.keys() (as in most popular languages)

                                                                                                      • Javascript makes it much harder to catch errors. Its implicit typecasting (undefined+“1”==“undefined1”, really??) and misuse of exceptions in the API means that when something goes wrong, you’ll often find out a few functions later, and then struggle to zero-in on the actual problem.

                                                                                                      • The ecosystem is too fractured. The lack of a curated “standard library” sends novices into all sorts hacky solutions, and makes other people’s code less familiar.

                                                                                                      I could really go on for a long while, and there are tons of example that I could give. I can say positive things too, like it has a good JIT, lots of interesting libraries, and some nifty syntax features (while lacking others), but overall think it’s a really bad language, that just happened to be in the right place and in the right time.

                                                                                                      1. 1

                                                                                                        For the record, JavaScript has always had inheritance, it just hasn’t had a class syntactical sugar that made it trivial to use until ES6.

                                                                                                        1. 1

                                                                                                          I wouldn’t call it bad. It just has bad parts. The == operator you mentioned is a trap for many beginners. On the other hand, there’s no inheritance problem because the inheritance was always there - you just have to know how prototypes work. The type system without extra tools and some practice is a pain. Yet the closure or say prototypical inheritance and composability you get is great.

                                                                                                          JavaScript got really lousy reputation because unlike, say, C++ or Java, everybody wrote it, not just people who studied software engineering for five years and know how to use tools, have structure and not break the rules.

                                                                                                          And it’s keeping the lousy reputation because it is still being done - randos adding jquery plugins for perfectly css-able animations even today.

                                                                                                          Plus it’s got 25 years of backwards compatibility to maintain, so those bad parts never leave. Yes, it has been at the right place at the right time - but many others have tried and are still trying.

                                                                                                          But despite all the bad parts and lack of standards, it’s still immensely flexible and productive and for a lot of use cases actually provides the best concepts to do them. Could you put something like elixir in a browser engine? Or java? Or Rust? Probably. Would it be better? Maybe, but I suspect not by much.

                                                                                                          I don’t know, I’m probably not seeing it. I’m not claiming that it’s a great language or that it’s even good for everything and everyone. But people only see the ads and single page apps where they don’t belong or where they simply don’t like it, and ignore a lot of directness that the language provides, look down on flexibility, and don’t allow the little language that could its deserved praise (where it does deserve it).

                                                                                                          Once again, as I’ve said in another comment - I don’t claim it’s the best language ever. I’m just saying it is not garbage. These days the tooling and the entire ecosystem is mature and there are no more language issues in writing a typical NodeJS application then in most other similar languages.

                                                                                                          1. 1

                                                                                                            Javascript has a weird type-system that doesn’t really pay off. Sure, they added inheritance recently (welcome to the 80s)

                                                                                                            It added inheritance as a sop to people who didn’t know composition and refused to learn. Are you not satisfied with that? Does it have to become a pure Smalltalk clone for you? Composition is more powerful but it’s less familiar. Now JS has easy ways to do both.

                                                                                                      2. 24

                                                                                                        I have a deep understanding of JavaScript; I promise that my opinion is rooted in experience.

                                                                                                        1. 6

                                                                                                          Even though you personally find Node impressive, there might be people who don’t get impressed by languages (or any software really).

                                                                                                          Being impressed or having respect (for a software) makes no sense. It is just a tool that should be used or discarded at will. Not a cultural icon.

                                                                                                          If you do know if well, you’ll see that it isn’t any more garbage then any other modern language for most purposes for which it is used - at least on backend.

                                                                                                          You have stated no arguments that support your conclusion. I believe that the jury is still out on the matter of language effect on productivity. All the studies I know of were totally botched.

                                                                                                          Anecdotally, I have seen more poor Node backends than Python ones. I have also seen less high quality Haskell backends, which confuses me greatly. Still, I wouldn’t go as far as to conclude that everything is the same crap.

                                                                                                          1. 6

                                                                                                            Denying the role of aesthetic judgement in programming is madness.

                                                                                                            1. 1

                                                                                                              I didn’t state I find Node impressive. I do love it for the productivity it brings to me. And that is just the point of my reply. The guy claimed JavaScript is garbage, also without arguments. I’ve just pointed out that. No more garbage then any other language, in my opinion. If anybody brings arguments into this whole discussion, including the original post of the thread that claims people are pushing node, we can talk about with arguments. Otherwise we’re all just giving opinions and estimations.

                                                                                                              Anecdotally I’m seeing much more crappy Java Enterprise and Spring backend code lately then node. Likely because I work at a java shop now. But I don’t claim that people are pushing Java exclusively for backend (even though they do at my company, we literally have 100% Java in my 800 people department), nor do I claim Java is garbage.

                                                                                                              I hope that clarifies my objection to the claim of garbageness.

                                                                                                              1. 4

                                                                                                                I think you are right that JavaScript brings great initial productivity. Especially in the single developer case. For many simple tasks, it is easy to use node, easy to use npm, and easy to deploy code. Where I have seen problems that I know are avoidable in other languages is in its long term sustenance and operation, which are vitally important parts of software engineering.

                                                                                                                Other languages have, for example, highly vetted and deep standard libraries of functions which are included in the system and move very slowly, which eliminates large classes of dependency management issues. Or, they have good type systems, which helps prevent common problems, especially in dynamic languages. Or they have exceptional tooling that enforces good practices. Or they are especially operable in production, with good intrinsic performance or observability characteristics.

                                                                                                                But the most important thing, to me, is that most other languages have a culture of remembering, but this is distinctly lacking in JavaScript. I attribute this to many JavaScript programmers starting from scratch in their software career inside JavaScript, and not having broader exposure to the vast surface of other kinds of software. And I attribute it also to the “stack overflow” method of programming, in which rather than engineer your software, you assemble it from the guesses of others, losing fidelity and getting more blurry with each iteration.

                                                                                                                It could sound like I’m being a pretentious jerk. I’ll confess to that. But having been a professional software engineer for now 32 years, and having seen probably a hundred languages and environments, the current JavaScript one is my least favorite. I appreciate that it’s one that you have significant personal investment in, but I would also encourage you to step out and up, and look around.

                                                                                                                1. 1

                                                                                                                  Thanks, this also raises some quite relevant concerns. And I agree with these things. And now I have to fall back to the fact that despite these problems, it’s not garbage. I did step out and I try other languages and their frameworks, but I’m simply personally the most productive with it. And when I worked in teams where Node was used on the backend, the teams were professionals and mostly didn’t have problems with the language itself - maybe more or less then if it was done in, say, Spring or Rails, but I would say the typical problems are always stupid things like commas in the database where they break serialization somehow.

                                                                                                                  And that is the point of my original comment. Which was that I object to the claim that JavaScript is garbage. Maybe a lot of garbage is written in JavaScript today, but it in itself is not that, and can provide perfectly productive envrionment for doing our jobs.

                                                                                                            2. 6

                                                                                                              I wouldn’t call JavaScript “garbage” myself, but it sure has some problems that few other languages have. [1] + [2] resulting in "12" being a simple example. JavaScript definitely took the 90s/00s vogue of “all things should be dynamic!” more than a few steps too far.

                                                                                                              considering that node was created only a decade ago and has vastly more users then some “serious” things that exist for ages, it’s obvious that there’s something that it’s going correctly.

                                                                                                              Well, just because it’s popular doesn’t mean it’s good ;-)

                                                                                                              I notice myself that I often use tools that I know, even when it’s not necessarily the best fit, simply because it’s so much easier. Yesterday I wrote some Ruby code for a Jekyll plugin and had to look up a lot of basic stuff and made a few simple mistakes along the way; there was quite a lot of overhead here. And I programmed Ruby for a living for 2 years (but that was 5 years ago, and looks like I have forgotten much).

                                                                                                              JavaScript is rather unique in the sense that almost everyone has to deal with it because it’s the only language supported by browsers[1], so there are a lot of people familiar with JS who would rather like to use it in other scenarios as well: not necessarily because it’s the “best”, but because it’s just easier as they won’t have to re-learn a whole bunch of stuff.

                                                                                                              That’s not necessarily a bad thing, by the way; I’m all for giving people the tools to Get Shit Done. My point is merely that much of NodeJS’s popularity probably stems from factors other than intrinsic qualities of the language, runtime, and/or ecosystem.

                                                                                                              [1]: Ignoring wasm, which isn’t quite ready for production-use, and “X-to-JS” compilers, which typically still require knowledge of JS.

                                                                                                              1. 1

                                                                                                                Oh, I wasn’t claiming that the popularity of NodeJS comes from it’s quality. I’m just saying JavaScript is not garbage, which the commenter claimed without argumenting it.

                                                                                                                I mean, I know that [1] + [2] is “12” in JavaScript. But if you ask me how many times I’ve had a problem because of that in the last year, I would possibly be mistaken, but I would say 0 times.

                                                                                                                Again, it’s not the best language and it has its problems. But it’s not garbage.

                                                                                                                1. 2

                                                                                                                  I mean, I know that [1] + [2] is “12” in JavaScript. But if you ask me how many times I’ve had a problem because of that in the last year, I would possibly be mistaken, but I would say 0 times.

                                                                                                                  I find this interesting, because a few comments upwards, you state this:

                                                                                                                  The typical problems are always stupid things like commas in the database where they break serialization somehow.

                                                                                                                  It might just be me, but in no other language have I ever heard of specifically this problem. If you dig a little deeper, you’ll notice that there are a few fundamental issues in the language. But definitely the most prominent root issue is that types are treated extremely loosely, which causes all sorts of offshoot problems, like the two above.

                                                                                                                  I always try to think a bit more holistically about this, and when you do, you start to see this pop up everywhere. Just yesterday I was debugging an issue with a colleague where he accidentally was throwing a JSON-encoded string at a program where in fact he should have been taking the JSON document, extract a specific key’s string value and send that to the program. Basically the same thing: it’s too easy to mix up types.

                                                                                                                  I occasionally see this in Python as well: when you accidentally have a string instead of a list of strings; because of the “everything is a sequence” abstraction it’s too easy to mix things up, and you end up chasing down the rabbit hole before you figure out where it’s going wrong. It’s better if things error out early when you try to do something that makes no sense.

                                                                                                                  Having type-specific operators makes it easier to get your bearings when reading unfamiliar code, too, in my experience.

                                                                                                              2. 3

                                                                                                                And considering that node was created only a decade ago and has vastly more users then some “serious” things that exist for ages, it’s obvious that there’s something that it’s going correctly.

                                                                                                                No, it means JS has a powerful monopoly (the web) and thus commands a huge mindshare. Some subset of those people want to take their painstakingly earned experience to the server.

                                                                                                                1. 0

                                                                                                                  So, ‘heads I win, tails you lose’, eh? Good argument. /s

                                                                                                              1. 1

                                                                                                                So what are the best patterns for scaling horizontally with Erlang/Elixir?

                                                                                                                1. 1

                                                                                                                  I’m not aware of any rules like “you must write elixir/Erlang exactly this way to scale horizontally”. It scales automatically, part of BEAM. Just write code in these languages and don’t try to go outside the box (NIFs, for example) and you’ll be fine is my understanding.

                                                                                                                  1. 1

                                                                                                                    My impulse is to load balance the way I would any python code.

                                                                                                                    1. 2

                                                                                                                      this works, although as with any sharded thing, it’s helpful if you design to permit sharded stuff to stay in-shard as much as possible. I mention this because erlang has “free” distributed systems built in, so reaching across shards is trivial, even accidentally. There’s an old anecdote of a company that moved a bunch of servers from London to another continent, booted them up, and the app was mysteriously slow. Come to find out, they had accidentally left the database server behind, and erlang was seamlessly accessing it across the internet with appropriate speed penalty. Made for confusing debugging.

                                                                                                                      1. 1

                                                                                                                        That’s a nice story. Would make a good post of it’s own.

                                                                                                                      2. 1

                                                                                                                        What do you mean? Run multiple python processes and use haproxy or something?

                                                                                                                        edit: this is probably what you’d want to know https://www.poeticoding.com/the-primitives-of-elixir-concurrency-full-example/

                                                                                                                        1. 1

                                                                                                                          Yea basically.

                                                                                                                  1. 11

                                                                                                                    Oh my god, someone put an actual URL with a version number right inside the import statement. I’ve been dreaming about that (albeit on the Python side of dynamics) for years!

                                                                                                                    We kind of grown accustomed to the idea of what belongs to a language, and what’s tooling. But may be it’s time for our assumptions based on decade long habits formed in the times without even the idea of repositories and automated updates to finally become obsolete.

                                                                                                                    1. 3

                                                                                                                      Sounds like a pretty bad idea, to be honest. I can see why no one is doing this (outside of REPLs/scripts).

                                                                                                                      1. 6

                                                                                                                        It’s probably a good idea if you can expand on why it’s a bad idea for the benefit of discussion.

                                                                                                                        1. 6

                                                                                                                          Because doing that would mean spreading this information all across the codebase.

                                                                                                                          And if one goes “oh this is obviously bad, I’ll centralize all the imports into one file and export them to the codebase from there” – congrats, now we have reinvented status quo, just poorly.

                                                                                                                          There is a lot of value in having a dedicated dependency file that records the (orgName, libraryName, version)-triple for a project, such that changes are easy and guaranteed to be consistent.

                                                                                                                          1. 4

                                                                                                                            So I’m looking into this and I have to say I like the way it’s done. Importing by URL is the same way the module system works in the browser. Rather than using URL imports in all your files, you can use an importmap (and I think this idea comes from browsers too) so I don’t think it’s likely people will be reexporting all their dependencies from one file. Deno has integrity checking and lock files, and you can also choose to vendor your dependencies if that works better for you. You can pin versions in the URL in most CDNs and also deno.land, e.g. https://deno.land/std@0.50.0/http/mod.ts. It has a URL rewriting service for third party modules which works the same as the previous standard library example. Obviously you would use an importmap here so you only specify the desired version in one place.

                                                                                                                            1. 2

                                                                                                                              So, we can expect that no one is going to use imports with versions manually because it’s not a good idea in favor of importmaps, as mentioned.

                                                                                                                              1. 1

                                                                                                                                I’m not quite sure what you mean? You use the versioned URL in the import map, and you use the lock file for integrity checking.

                                                                                                                            2. 1

                                                                                                                              I have an impression it’s an opt-in. Like, if your whole code base is one file, then you can do that instead of having a package.json.

                                                                                                                              1. 1

                                                                                                                                Agreed…

                                                                                                                                One feature, I guess, is that you could easily depend on different versions of a package in different files of the same project. I think that Golang already does it to some extent, but I have not needed that, yet.

                                                                                                                              2. 1

                                                                                                                                one serious problem with it is that URLs are evanescent and can change both ownership and content trivially.

                                                                                                                                1. 1

                                                                                                                                  That’s where integrity checking comes in. It doesn’t address availability (if that’s important then maybe you should vendor or backup a local copy anyway), but it does at least mean you’re safe from malicious changes at the source.

                                                                                                                          1. 3

                                                                                                                            Company site: Amazon

                                                                                                                            Position(s): Senior or Mid-Level Software Development Engineers

                                                                                                                            Location: REMOTE right now, but ONSITE when covid-19 clears up; either in Santa Monica CA, or Seattle WA

                                                                                                                            Description: We build and maintain the Alexa App, used to set up and manage hundreds of millions of Alexa devices. We’re critical path to customer happiness, so these positions are relatively high visibility, high authority, and high impact.

                                                                                                                            Tech stack: React Native/TypeScript, Java/Objective C, Java/Kotlin, AWS

                                                                                                                            Contact: drop me a note on lobsters or via e-mail (I’m felgallo@) (I manage the hiring managers)

                                                                                                                            1. 4

                                                                                                                              I think this article misses a critically important point about load testing – you need it when your service has value to customers and-also either there’s an upcoming spike in traffic or a change to your service’s capacity to handle requests.

                                                                                                                              If your service doesn’t have value to customers, then downtime during peaks is acceptable, because nobody cares.

                                                                                                                              If your service is operating at a constant-forecasted traffic plateau and is not changing, then you’re fine.

                                                                                                                              But if downtime would significantly erode customer experience and trust, and your traffic is variable and threatens to be an outlier (e.g., black friday, prime day, superbowl commercials, christmas morning), then you need it.

                                                                                                                              And, if customers care, then even at a steady state of traffic, if you are making significant architectural changes (e.g., switching from one database to another) which could expose surprise bottlenecks, then you need it.

                                                                                                                              You also need it in certain other special circumstances that don’t impact everyone, but you should think about this one regardless: if your service has a deep dependency graph (for example my teams at Amazon have this in Alexa), then being able to run a load test even during non-peak periods can help flush out emergent surprise bottlenecks. Sometimes teams make changes to solve a problem, and their reasoning is solid but not complete, and the resulting system bakes in an assumption which impacts performance. Among other emergent problems.

                                                                                                                              1. 23

                                                                                                                                I think Josh addresses a good point here: systemd provides features that distributions want, but other init systems are actively calling non-features. That’s a classic culture clash, and it shows in the systemd debates - people hate it or love it (FWIW, I love it). I’m also highly sympathetic to systemd’s approach of shipping a software suite.

                                                                                                                                Still, it’s always important to have a way out of a component. But the problem here seems to be that the scope of an init system is ill-defined and there’s fundamentally different ideas where the Linux world should move. systemd moves away from the “kernel with rather free userspace on top” model, others don’t agree.

                                                                                                                                1. 17

                                                                                                                                  Since systemd is Linux-only, no one who wants to be portable to, say, BSD (which I think includes a lot of people) can depend on its features anyway.

                                                                                                                                  1. 12

                                                                                                                                    Which is why I wrote “Linux world” and not “Unix world”.

                                                                                                                                    systemd has a vision for Linux only and I’m okay with that. It’s culture clashing, I agree.

                                                                                                                                    1. 6

                                                                                                                                      What I find so confusing - and please know this comes from a “BSD guy” and a place of admitted ignorance - is that it seems obvious the natural conclusion of these greater processes must be that “Linux” is eventually something closer to a complete operating system (not a bazaar of GNU/Linux distributions). This seems to be explicitly the point.

                                                                                                                                      Not only am I making no value judgement on that outcome, but I already live in that world of coherent design and personally prefer it. I just find it baffling to watch distributions marching themselves towards it.

                                                                                                                                      1. 6

                                                                                                                                        But it does create a monoculture. What if you want to run service x on BSD or Redox or Haiku. A lot of Linux tools can be compiled on those operating systems with a little work, sometimes for free. If we start seeing hard dependencies on systemd, you’re also hurting new-OS development. Your service wont’ be able to run in an Alpine docker container either, or on distributions like Void Linux, or default Gentoo (although Gentoo does have a systemd option; it too is in the mess of supporting both init systems).

                                                                                                                                        1. 7

                                                                                                                                          We’ve had wildly divergent Unix and Unix-like systems for years. Haiku and Mac OS have no native X11. BSDs and System V have different init systems, OpenBSD has extended libc for security reasons. Many System V based OSes (looking at you, AIX) take POSIX to malicious compliance levels. What do you think ./configure is supposed to do if not but cope with this reality?

                                                                                                                                      2. 2

                                                                                                                                        Has anyone considered or proposed something like systemd’s feature set but portable to more than just linux? Are BSD distros content with SysV-style init?

                                                                                                                                        1. 11

                                                                                                                                          A couple of pedantic nits. BSDs aren’t distros. They are each district operating systems that share a common lineage. Some code and ideas are shared back and forth, but the big 3, FreeBSD, NetBSD and OpenBSD diverged in the 90s. 1BSD was released in 1978. FreeBSD and NetBSD forked from 386BSD in 1993. OpenBSD from NetBSD in 1995. So that’s about 15 years, give or take, of BSD before the modern BSDs forked.

                                                                                                                                          Since then there has been 26 years of separate evolution.

                                                                                                                                          The BSDs also use BSD init, so it’s different from SysV-style. There is a brief overview here: https://en.m.wikipedia.org/wiki/Init#Research_Unix-style/BSD-style

                                                                                                                                          1. 2

                                                                                                                                            I think the answer to that is yes and no. Maybe the closets would be (open) solaris smf. Or maybe GNU Shepherd or runit/daemontools.

                                                                                                                                            But IMNHO there are no good arguments for the sprawl/feature creep of systemd - and people haven’t tried to copy it, because it’s flawed.

                                                                                                                                        2. 6

                                                                                                                                          It’s true that systemd is comparatively featureful, and I’ll extend your notion of shipping a software suite by justifying some of its expansion into other aspects of system management in terms of it unifying a number of different concerns that are pretty coupled in practice.

                                                                                                                                          But, and because of how this topic often goes, I feel compelled to provide the disclaimer that I mostly find systemd just fine to use on a daily basis: as I see it, the problem, though, isn’t that it moves away from the “free userspace” model, but that its expansion into other areas seems governed more by political than by technical concerns, and with that comes the problem that there’s an incentive to add extra friction to having a way out. I understand that there’s a lot of spurious enmity directed at Poettering, but I think the blatant contempt he’s shown towards maintaining conventions when there’s no cost in doing so or even just sneering at simple bug reports is good evidence that there’s a sort of embattled conqueror’s mindset underlying the project at its highest levels. systemd the software is mostly fine, but the ideological trajectory guiding it really worries me.

                                                                                                                                          1. 1

                                                                                                                                            I’m also highly sympathetic to systemd’s approach of shipping a software suite.

                                                                                                                                            What do you mean here? Bulling all distro maintainers until they are forced to setup your software as default, up to the point of provoking the suicide of people who don’t want to? That’s quite a heavy sarcasm you are using here.

                                                                                                                                            1. 12

                                                                                                                                              up to the point of provoking the suicide of people who don’t want to

                                                                                                                                              Link?

                                                                                                                                              1. 25

                                                                                                                                                How was anyone bullied into running systemd? For Arch Linux this meant we no longer had to maintain initscripts anymore and could rely on systemd service files which are a lot nicer. In the end it saved us work and that’s exactly what systemd tries to be a toolkit for initscripts and related system critical services and now also unifying Linux distro’s.

                                                                                                                                                1. 0

                                                                                                                                                  huh? Red Hat and Poettering strongarmed distribution after distribution and stuffed the debian developer ballots. This is all a matter of the public record.

                                                                                                                                                  1. 10

                                                                                                                                                    stuffed the debian developer ballots

                                                                                                                                                    Link? This is the first time I am hearing about it.

                                                                                                                                                    1. 5

                                                                                                                                                      I’m also confused, I followed the Debian process, and found it very through and good. The documents coming out of it are still a great reference.

                                                                                                                                                2. 2

                                                                                                                                                  I don’t think skade intended to be sarcastic or combative. I personally have some gripes with systemd, but I’m curious about that quote as well.

                                                                                                                                                  I read the quote as being sympathetic towards a more unified init system. Linux sometimes suffers from having too many options (a reason I like BSD). But I’m not sure if that was the point being made

                                                                                                                                                  Edit: grammar

                                                                                                                                                  1. 5

                                                                                                                                                    I value pieces that are intended to work well together and come from the same team, even if they are separate parts. systemd provides that. systemd has a vision and is also very active in making it happen. I highly respect that.

                                                                                                                                                    I also have gripes with systemd, but in general like to use it. But as long as no other project with an attitude to move the world away from systemd by being better and also by being better at convincing people, I’ll stick with it.

                                                                                                                                                  2. 2

                                                                                                                                                    I interpreted it as having fewer edges where you don’t have control. Similar situations happen with omnibus packages that ship all dependencies and the idea of Docker/containers. It makes it more monolithic, but easier to not have to integrate with every logging system or mail system.

                                                                                                                                                    If your philosophy of Linux is Legos, you probably feel limited by this. If you philosophy is platform, then this probably frees you. If the constraints are doable, they often prevent subtle mistakes.

                                                                                                                                                1. 4

                                                                                                                                                  I’m a bit confused about this language. The core idea seems to be to take something cool—static linking—and apply it pervasively, cutting down notions of interface boundaries and ensuring that once you depend on something, regardless of whether you’re a whole program or module or individual function, you always get that thing, forever. Great.

                                                                                                                                                  Except static linking isn’t cool, and this idea raises it from an annoyance to to the worst nightmare I can imagine. Static linking (and containers and full-stack installers) killed ABI-level abstraction: a possibly-transitive dependency changes an implementation detail, and you have to relink everything. Content-addressed references kill API-level abstraction too: a dependency somewhere changes an implementation detail, and your source code needs to change to reference it. Whether it’s a newly-discovered speed optimization or a third-party API change, every detail now demands a change in everything downstream of it. And if the tools make this find-and-replace operation as easy as it’ll need to be, it’s hard to see the point in the concept in the first place.

                                                                                                                                                  I really hope I’ve fundamentally misunderstood this.

                                                                                                                                                  1. 6

                                                                                                                                                    it’s interesting that you say this, because most code written today s an unmediated collection of static and dynamic entities in an environment without a concrete opinion. By default, we’ve ended up in a place where some code is static by convention (e.g., glibc; unmaintained code; legacy historical code), and some code is highly dynamic (e.g. leftpad), but this area has been absent of mechanisms and processes.

                                                                                                                                                    It’s possible that this is the wrong mechanism and the wrong process, but let’s love the idea together for a moment that all code is absolutely immutably static.

                                                                                                                                                    Some of the guarantees that gives us are kind of interesting, in the same way that immutable data gives us some interesting qualities (e.g., GC gets real easy, spooky action at a distance is far more constrained, refactoring gets less scary). For example, you could imagine that a gigantic, internet-wide, parallelized perfect glibc could emergently form, because it’s possible that everyone is now building on everyone else’s fundamental algorithm work, rather than each person starting again from scratch. Obviously, deployment becomes trivial, just as it does today when you explicitly specify dependency versions.

                                                                                                                                                    There are some serious and interesting problems – like, how do you make sure an upgrade is an upgrade, etc. But even some ‘difficult’ problems like forced upgrades for security measures are orthogonal to this basic idea and can be implemented as tooling.

                                                                                                                                                    Overall an interesting direction.

                                                                                                                                                    1. 3

                                                                                                                                                      I’m not sure how relevant it is that “all code is absolutely immutably static”.

                                                                                                                                                      The important point about the status quo is that we have symbolic references at our disposal. Whether it’s glibc adding a better allocator or left-pad discovering a faster way to pad a string, I shouldn’t need to care that these things are being modified all the time. And if I don’t care about left-pad getting faster under me, I care even less if a dependency a mile down the tree depends on left-pad too. You can name all sorts of problems with this idea in practice, and I won’t argue with you: the reality is kinda terrible. But despite all the terribleness, it works well enough often enough to hold considerable value—I can usually update dependencies without changing my source code at all. If source code contains all of its dependencies, this no longer makes sense.

                                                                                                                                                      For example, you could imagine that a gigantic, internet-wide, parallelized perfect glibc could emergently form, because it’s possible that everyone is now building on everyone else’s fundamental algorithm work, rather than each person starting again from scratch.

                                                                                                                                                      I’m not really sure what you’re getting at here. Could you elaborate?

                                                                                                                                                      There are some serious and interesting problems – like, how do you make sure an upgrade is an upgrade, etc. But even some ‘difficult’ problems like forced upgrades for security measures are orthogonal to this basic idea and can be implemented as tooling.

                                                                                                                                                      I absolutely disagree with this. The defining property of Unison removes the layer of indirection between depender and dependee. Upgrading one’s dependencies can, by design, be achieved only by modifying the source code. That’s not orthogonal to the basic idea—it’s as direct a consequence as you can get.

                                                                                                                                                      And if you make this easy by hiding it with tooling somehow, code starts not to look so absolutely immutably static after all.

                                                                                                                                                      1. 4

                                                                                                                                                        you absolutely do turn out to care that, e.g., leftpad is being modified all the time, especially when it’s out from under you. In practice many changes, even well intentioned “upgrade to performance only” changes, cause the sum of your program to stop working. What if it didn’t have to be terrible? What if we could find a way to get beyond this shitty local maxima we’re sitting on?

                                                                                                                                                        On the ‘internet-wide parallelized perfect glibc’ – right now, how do you contribute code? You might for example put up a pull request on github and walk through a long dance with the maintainer to get it out there. Maybe your code will be included in a future library release. In a content-addressible space, imagine that you want to upgrade sort() from bubble to merge (or something). Now, you implement that function the way you want, and you publish it, and it’s available to everyone else’s editor immediately. Suddenly there are ten thousand sort()s when you try to autocomplete, each one with different tradeoffs and optionalities and performance conditions. Now imagine that your environment (or some curator) can weight the ones that are best for your current condition up to the top, and shadow off those which aren’t good or appropriate at the time.

                                                                                                                                                        Over the course of a few decades, you’re going to have an emergent glibc-alike that is essentially perfect. Every variant of every algorithm and data structure will be available, and there will be clear winners optimized for various cache architectures and instruction sets.

                                                                                                                                                        I think you’re taking a highly optimistic look at today’s dependency management situation and a highly pessimistic look at the opportunities for intentional dependency management. Try it the other way around! I agree that this is quite possibly not the right idea yet, but if the node.js ecosystem is the pinnacle of achievement in this space then we are all thoroughly fucked.

                                                                                                                                                  1. 2

                                                                                                                                                    Why should command line interfaces be restricted to a single scroll? We definitely need many more scrolls of magic to perform our duty.

                                                                                                                                                    I prefer to have multiple scrolls, big and small, on my desktop. Most importantly, the scrolls can interact with each other under my command.

                                                                                                                                                    1. 2

                                                                                                                                                      Can’t tell if UX requirement or really next-level Nethack player…

                                                                                                                                                      1. 2

                                                                                                                                                        If the latter, jxy is definitely running a modded Nethack. Scrolls in vanilla Nethack can’t invoke each other. ;)

                                                                                                                                                        I’m not sure if you can make little finite state automata or circuits in Nethack by using chains of exploding objects setting each other off, or boulder traps rolling across each others’ triggers.

                                                                                                                                                        1. 1

                                                                                                                                                          Nethack, meet Minecraft.

                                                                                                                                                          (I guess that’s Dwarf Fortress?)

                                                                                                                                                          1. 1

                                                                                                                                                            Scrolls definitely interact with each other. Identify, to begin with, and remove curse. And there are…others.

                                                                                                                                                            1. 1

                                                                                                                                                              I could’ve been clearer. I mean they don’t have any way to interact with one another without repeated player input. You don’t get anything like a scroll of reading-other-scrolls.

                                                                                                                                                      1. 1

                                                                                                                                                        It looks like this document’s not available, and I’m unable to find it elsewhere on the net (just finding the abstract instead). Does anyone have a good link/copy?

                                                                                                                                                        1. 1

                                                                                                                                                          answering my own question: http://www.ijdesign.org/index.php/IJDesign/article/view/993/365 – and also the book is available on Amazon as paper, for about $50.

                                                                                                                                                          1. 1

                                                                                                                                                            Ooh, that’s a different paper from the one I linked, but also super interesting and now in my to-read folder.

                                                                                                                                                            ETA: and it’s actually a more condensed version of the paper I linked, and so more suitable for skimming or sharing. Clearly the superior find for my purposes. Thanks!

                                                                                                                                                          2. 1

                                                                                                                                                            I get this PDF link at the bottom of the page. Does that work for you?

                                                                                                                                                          1. 4

                                                                                                                                                            When will people realize that imposing CoC tramples on peoples feelings of moral autonomy?

                                                                                                                                                            I want to know, what do CoC proponents think whats causing the backlash?

                                                                                                                                                            1. 30

                                                                                                                                                              The backlash is caused by some folks wanting to be assholes. A piece of documentation saying ‘respect others’ should not be threatening to anyone.

                                                                                                                                                              How can anyone defend the attacks on Linus right now? Him and his family are having threats on their lives over a document asking others to be respectful.

                                                                                                                                                              1. 5

                                                                                                                                                                So the best argument you could come up against people disagreeing with you is basically the equivalent of “have you stopped beating your spouse yet”?

                                                                                                                                                                I think it’s largely a matter of people from the US trying to force their cultural norms onto the rest of the world, and frankly I’m not willing to lower civilizatory standards to accommodate largely US-specific social issues.

                                                                                                                                                                There are certainly issues to be solved, but adopting US-style problem-solving approach of “war on bad behavior” will be similarly effective as their “war on drugs” or “war on terrorism”. Thanks, but no thanks, I want to improve things, not make them worse.

                                                                                                                                                                1. 4

                                                                                                                                                                  I want to be right or at least to say things I believe are correct even if they make me an asshole.

                                                                                                                                                                  1. 6

                                                                                                                                                                    If you think human conflict is solved the “show the asshole the boot” way, then you probably lack experience, because your opponent will claim that you are the asshole.

                                                                                                                                                                    Also, take a step back. Where did i approve of harassing other people? That i approve a thought does not mean that i approve all methods of enforcing or implementing it. That i think stealing is illegal does not mean that i approve of going around and lynching burglars.

                                                                                                                                                                    1. 24

                                                                                                                                                                      If you think human conflict is solved the “show the asshole the boot” way, then you probably lack experience

                                                                                                                                                                      The counter-argument to this is https://en.wikipedia.org/wiki/Paradox_of_tolerance

                                                                                                                                                                      1. 24

                                                                                                                                                                        If you think human conflict is solved the “show the asshole the boot” way, then you probably lack experience, because your opponent will claim that you are the asshole.

                                                                                                                                                                        Have you ever worked in an office, volunteer organization, missionary group, art collective, or literally any other group human endeavour?

                                                                                                                                                                        They all have expected norms of behavior and ask those who don’t conform to them to leave.

                                                                                                                                                                        1. 1

                                                                                                                                                                          I don’t remember any such group needing a pseudo-law HR-babble document to accomplish that, at least not in the last 30 years.

                                                                                                                                                                          1. 12

                                                                                                                                                                            They literally all do. Every single organization you’ve ever been involved with that wasn’t just you and some buddies had an employee handbook or volunteer agreement or something in which this sort of thing was spelled out.

                                                                                                                                                                            To not have one opens them up to “well I didn’t know I couldn’t do that” when they get mad at someone, or a lawsuit if they get fired because they didn’t know some behavior wasn’t acceptable.

                                                                                                                                                                            And apparently these sorts of things are necessary, because a lot of people can’t just…not be a dick.

                                                                                                                                                                            1. 1

                                                                                                                                                                              There’s a long unbroken chain from https://en.wikipedia.org/wiki/Code_of_Hammurabi to present day, by way of https://en.wikipedia.org/wiki/Common_law (among other such pseudo-law HR-babble documents, including of course https://www.archives.gov/founding-docs/constitution-transcript).

                                                                                                                                                                        2. 1

                                                                                                                                                                          assholes

                                                                                                                                                                          OK, that’s a start. Now define it, as opposed to thinking anyone who acknowledges it’s a complex topic is a horrible human being. Define it in a culture-neutral fashion, and define it such that the non-neurotypical don’t get thrown out or made to feel less than.

                                                                                                                                                                        3. 1

                                                                                                                                                                          I don’t even think that’s the biggest problem directly, but the fact that “imposing” (not a word I’d choose) a CoC on a community that’s (obviously) not prepared for it will be divisive – and why should it not? It’s kind of the point of a CoC – a “motion of confidence” of sorts that a community poses to itself. Either it’s admitted which forces the reactionaries to split of or if it looses the progressives don’t feel welcome anymore. And frankly, I don’t know if this is a good thing or not.

                                                                                                                                                                        1. 5

                                                                                                                                                                          In support of pruning non-determinism being less effective than avoiding it: if you have three concurrent agents with m,n,p respective atomic steps the total number of execution orderings is (m+n+p)!/m!n!p!. That gets really really big really really fast.

                                                                                                                                                                          1. 2

                                                                                                                                                                            well maybe, but you can also prune many of those steps as either stateless or nonconflicting (e.g., agent0 with M steps that all operate on a local variable that results in a message send, agent1 with N steps that all operate on a global state but transactionally with a commit at the end, and agent2 with P steps that all operate on data that never escapes the agent during the lifetimes of agent0 and agent1).

                                                                                                                                                                          1. 2

                                                                                                                                                                            For someone who knows absolutely nothing about gaming, World of Warcraft, or this thing in particular… what is this? Can someone explain?

                                                                                                                                                                            1. 4

                                                                                                                                                                              World of Warcraft is a massively popular 16 years old game, and maybe one of the most popular games ever. Since its launch in 2004 it’s been changing and evolving into what it is today, which is something completely different to what it was in its inception. Given that a large number of people would like to play the Vanilla WoW, that is, the first version of the game before any expansion was released, Blizzard has decided to roll out a “classic” version with all the content prior to the first expansion. This expansion was released in late 2006, and since there have been many more. Before the company’s official announcement that they would be releasing this classic version, many requests were made for it by fans but they were turned down by Blizzard citing several arguments such as: “the vanilla wow doesn’t exist anymore since the codebase has continued to evolve” and “Vanilla wow would be looking back and we want to move forward”. However, a vanilla WoW paid server named Nostalrius, maintained by fans for fans gained such popularity that during its peak it had more than 100k players on it. Sadly, it had to be closed in 2016 after Blizzard sent them a cease and desist order. It would seem that from the whole episode the company realized that there was actually a market for a classic WoW and they eventually changed their mind.

                                                                                                                                                                              1. 6

                                                                                                                                                                                World of Warcraft is a popular commercial subscription-based cloud-hosted enterprise legacy app featuring a low grade CRM system married to a highly complex logistics system in a standard 3 tier architecture deployed in a fully sharded configuration. Like many legacy systems, it has undergone significant schema mutation over the course of its deployed lifecycle in response to customer demand. Notably, it started out with a mostly-denormalized schema and, with the advent of improved database performance, a better understanding of the customer base’s requirement envelope, and feature creep, it has moved towards Codd’s 3rd normal form.

                                                                                                                                                                                As with many legacy apps, some customers’ business needs mandate that they stay pinned to older versions of the app. Interestingly, customers have here asked that an earlier version of a cloud-provided app be made available 12 years later, which poses some interesting issues having to do with incompatible schema migration. Given that the app is also written in a mix of obscure legacy languages, the traditional approach of simply migrating the queries and schema together is technically formidable.

                                                                                                                                                                                One established practice here is to create a proxy facade layer. In this pattern, you keep the interface to the legacy client application exactly the way it is, but create an intermediate layer which translates the db calls to and from the normalized format. This incurs round trip cost and bugs are common in edge cases, especially in frequently-undocumented minor shifts in API and field meaning, and especially given the expected low coverage of unit and functional tests in a 12 year old codebase. This technique is frequently overused owing to underestimation of the cost and time complexity of ferreting out the edge cases.

                                                                                                                                                                                The other established practice is to perform a one-time wholesale schema migration, normally done either through an ETL toolchain like Informatica, or more commonly through hand-written scripts. This approach frequently takes more developer time than the facade approach, owing to needing to “get it right” essentially all-at-once, and having a very long development loop.

                                                                                                                                                                                Whatever the technique used, schema migration programs of this scope need a crisp definition of what success looks like that’s clearly understood by all the involved developers, project managers, data specialists, and product leaders. Too frequently, these types of programs fail owing to incomplete specification and lack of clearly defined ownership boundaries and deliverable dependencies. The industry sector in which this legacy app resides is at greater than average risk for failure of high-scope projects due to fundamental and persistent organizational immaturity and improperly managed program scopes.

                                                                                                                                                                                Also, they better not nerf fear, because rogues were super OP in vanilla and getting the full 40 down the chain to rag with portals was tough enough.

                                                                                                                                                                                1. 2

                                                                                                                                                                                  As someone who levelled through Stranglethorn Vale via painstaking underwater+Unending Breath grinds in order to escape OP rogue stunlock love, I say to you: Bravo Sir!. Also, f**k the debuf cap.

                                                                                                                                                                              1. 1

                                                                                                                                                                                There are people who concluded from the Vasa story that all incremental improvement is a bad strategy. However, if the Vasa had been sent to sea as originally designed, it could not have served its purpose. Being under-gunned, someone would have sent it to the bottom full of holes. Being somewhat ordinary, it would have failed in its representative (image) role. Recent research has shown that a relatively modest increase of the Vasa’s length and breadth (claimed technically feasible) would have made it stable, so my reading of the Vasa story is: Work hard on a solid foundation, learn from experience, and don’t scrimp on the testing.

                                                                                                                                                                                At risk of pushing the nautical metaphor a bit too far, it looks like Bjarne may have snatched defeat from the jaws of victory with this analysis: while presuming that perhaps this time the Vasa of C++ will float, the application world is eating its lunch with PT boats in the form of Javascript.

                                                                                                                                                                                Small nimble ugly languages trump large ones for most purposes.

                                                                                                                                                                                1. 1

                                                                                                                                                                                  and this is why all kernel development is today done in Lua.