1. 8

    While the syntax is quite different, I think people really underappreciate how simple the Erlang syntax is. It takes no more than a few hours to learn everything about Erlang’s syntax. It has so few things about it that even if they are someone odd, it’s still so much smaller than almost any other language I’ve used. I think people tend to get way too caught up on its oddness rather than this strength of simplicity.

    1. 1

      I actually agree with you about stuff like that. Most programmers don’t, though. Being C-like helped C++ and Java win converts more easily. As in, you always get more adoption giving a crowd what they’re used to starting out.

      1. 1

        Also, the syntax is really unsurprising if you’ve toyed with Prolog in the past.

        1. 1

          The author explicitly mentions that as a negative given it’s a weird language hardly any mainstream coders would’ve messed with. Instantly creates an obstacle to adoption for the masses.

        2. 1

          Yes, I played a bit with Erlang some time ago, and I was really surprised by how beautiful and simple it is.

        1. 4

          What’s the meaning of the last line, “I showed up for him”?

          1. 13

            As used here, “him” implicitly means more than just “Steve Jobs.” It alludes to the essence of Jobs, the things that make him who he is. Carmack is saying he dropped everything he was working on when Jobs asked for him because of his admiration and respect for Jobs’ as a person, not just for Jobs’ fame or influence. Sentences like these are frequently written with “him” italicized, and spoken with strong emphasis on “him.”

            That’s how I read it anyway.

            Sorry if my explanation seems patronizing, I just went ahead and assumed you’re a non-native English speaker.

            1. 6

              Thanks – not patronizing at all, even though I am in fact a native speaker :) Just not familiar with that phrase and unsure if I should take it literally.

              1. 8

                As a non-native speaker, that’s quite reassuring to know that English subtleties are deep, even for a native speaker :-)

              2. 6

                I read it as John showing up for Jobs’ funeral :-)

            1. 21

              Gosh, I couldn’t make it very far into this article without skimming. It goes on and on asking the same ‘why’ but mentally answering it in the opposite direction of the quoted comments.

              Docker is easy, standard isolation. If it falls, something will replace it. We’re not going in the opposite direction.

              The article doesn’t explain to me what other ways I have of running 9 instances of an app without making a big mess of listening ports and configuration.

              Or running many different PHP apps without creating a big mess of PHP installs and PHP-FPM configs. (We still deal with hosting setups that share the same install for all apps, then want to upgrade PHP.)

              Or how to make your production setup easy to replicate (roughly) for developers who actually work on the codebase. (Perhaps on macOS or Windows, while you deploy on Linux.)

              We’re not even doing the orchestration dance yet, these are individual servers that run Docker with a bunch of shell scripts to provision the machine and manage containers.

              But even if we only use 1% of the functionality in Docker, I don’t know how to do that stuff without it. Nevermind that I’d probably have to create a Vagrantbox or something to get anyone to use it in dev. (I’ve come to dislike Vagrant, sorry to say.)

              Besides work, I privately manage a little cloud server and my own Raspberry Pi, and sure they don’t run Docker, but they don’t have these requirements. It’s fine to not use Docker in some instances. And even then, Docker can be useful as a build environment, to document / eliminate any awkward dependencies on the environment. Makes your project that much easier to pick up when you return to it months later.

              Finally, I’m sorry to say that my experiences with Ansible, Chef and Puppet have only ever been bad. It seems to me like the most fragile aspect of these tools is all the checks of what’s what in the current environment, then act on it. I’m super interested in trying NixOS sometime, because from what I gather, the model is somewhat similar to what Docker does: simply layering stuff like we’ve always done on software.

              1. 1

                For the php part it’s not that complex. Install the required versions (Debian and Ubuntu both have 5.6 through 7.2 “major” releases available side by side that’s to Ondrej Sury’s repo. Then just setup a pool per-app (which you should do anyway) and point to the apps specific Unix domain socket for php-fpm in the vhost’s proxy_fcgi config line.

                I’ve used this same setup to bring an app from php5.4 (using mod_php) up through the versions as it was tested/fixed too.

                Is there some config/system setup required? You betcha. Ops/sysadmins is part of running a site that requires more than shared hosting.

                What are you gonna do with docker, have each developer just randomly writing whatever the fuck seems like a good idea and pushing their monolithic images to prod with no ops supporting it?

                1. 12

                  What are you gonna do with docker, have each developer just randomly writing whatever the fuck seems like a good idea and pushing their monolithic images to prod with no ops supporting it?

                  Yes. The whole point of “DevOps”/docker is to deploy softwares certified by “Works on My Machine” certification program. This eliminates coordination time with separate Ops team.

                  1. 2

                    Is this sarcasm, or are you actually in favour of the definition “DevOps = Developers [trying to] do Ops” ?

                    1. 7

                      Descriptively, that’s what DevOps is. I am prescriptively against such DevOps, but describing what’s currently happening with docker is unrelated to whether I am in favor of it.

                      1. 3

                        I don’t disagree that it’s a definition used by a lot of places (whether they call it devops or not). But I believe a lot of people who wax poetic about “DevOps” don’t share this same view - they view it as Operations using ‘development’ practices: i.e. writing scripts/declarative state files/etc to have reproducible infrastructure, rather than a “bible” of manual steps to go through to setup an environment.

                        I’m in favour of the approach those people like, but I’m against the term simply because it’s misleading - like “the cloud” or “server less”.

                  2. 2

                    I don’t understand your last point, that’s exactly what developers do all day.

                    In Docker, the PHP version the app depends on is set in code. It doesn’t even take any configuration changes when the app switches to a new PHP version.

                    But if there’s one gripe I have with the Docker way of things, baking everything into an image, it’s security. There are no shared libraries in any way, upgrading a dependency minor version requires baking a new image.

                    I kinda wish we had a middle road, somewhere between Debian packages and Docker images.

                    1. 3

                      the PHP version the app depends on is set in code

                      And of course we all know Docker is the only way to define dependencies for software packages.

                      1. 4

                        Did anyone say it was? Docker is just one of the easiest ways to define the state of the whole running environment and have it defined in a text file which you can easily review to see what has been done.

                      2. 1

                        You can share libraries with Docker by making services share the same Docker image. You can actually replicate Debian level of sharing by having a single Docker image.

                        1. 2

                          Well, I guess this is just sharing in terms of memory usage? But what I meant with security is that I’d like if it were possible to have, for example, a single layer in the image with just OpenSSL, that you can then swap out with a newer version (with, say, a security fix.)

                          Right now, an OpenSSL upgrade means rebuilding the app. The current advantage managing your app ‘traditionally’ without Docker is that a sysadmin can do this upgrade for you. (Same with PHP patch versions, in the earlier example.)

                          1. 4

                            And this is exactly why I don’t buy into the whole “single-use” container shit show.

                            Want to use LXC/LXD for lightweight “VM’s”? Sure, I’m all for it. So long as ops can manage the infra, it’s all good.

                            Want to have developers having the last say on every detail of how an app actually runs in production? Not so much.

                            What you want is a simpler way to deploy your php app to a server and define that it needs a given version of PHP, an Apache/Nginx config, etc.

                            You could literally do all of that by just having your app packaged as a .deb, have it define dependencies on php-{fpm,moduleX,moduleY,moduleZ} and include a vhost.conf and pool.conf file. A minimal (i.e. non-debian repo quality but works for private installs) package means you’ll need maybe half a dozen files extra.

                            And then your ops/sysadmin team can upgrade openssl, or php, or apache, or redis or whatever other thing you use.

                            1. 2

                              I actually do think this is a really good idea. But what’s currently there requires a lot more polish for it to be accessible to devs and small teams.

                              Debian packaging is quite a pain (though you could probably skip a lot of standards). RPM is somewhat easier. But in both cases, the packages typically bundle default app configuration and systemd unit files, which is a model that sort of assumes things only have 1 instance.

                              You could then go the LXC route, and have an admin manage each instance in a Debian container. That’s great, but we don’t have the resources to set up and manage all of this, and I expect that is the case for quite a lot of small teams out there.

                              Maybe it’s less complicated than I think it is? If so, Docker marketing got something very right, and it’d help if there was a start-to-finish guide that explains things the other way.

                              Also remember that Docker for Mac/Windows makes stuff really accessible for devs that are not on Linux natively. Not having to actually manage your VM is a blessing, because that’s exactly my gripe with Vagrant. At some point things inside the VM get hairy, because of organic growth.

                              1. 3

                                But in both cases, the packages typically bundle default app configuration and systemd unit files, which is a model that sort of assumes things only have 1 instance.

                                In the case of the context - it is one instance. Either you build your packages with different names for different stages (e.g. acme-corp-foo-app-test, acme-corp-foo-app-staging, acme-corp-foo-app-prod) or use separate environments for test/stage/prod - either via VMs, LXC/LXD, whatever.

                                Nothing is a silver bullet, Docker included. It’s just that Docker has a marketing team with a vested interest in glossing over it’s deficiencies.

                                If you want to talk about how to use the above concept for an actual project, I’m happy to talk outside the thread.

                                1. 2

                                  Also remember that Docker for Mac/Windows makes stuff really accessible for devs that are not on Linux natively. Not having to actually manage your VM is a blessing, because that’s exactly my gripe with Vagrant. At some point things inside the VM get hairy, because of organic growth.

                                  This is exactly why at work we started to use Docker (and got rid of Vagrant).

                                  1. 1

                                    At some point things inside the VM get hairy, because of organic growth.

                                    Can you define “hairy”?

                                    1. 2

                                      The VM becomes a second workstation, because you often SSH in to run some commands (test migrations and the like). So people install things in the VM, and change system configuration in the VM. And then people revive months old VMs, because it’s easier than vagrant up, which can take a good 20 minutes. There’s no reasoning about the state of Vagrant VMs in practice.

                                      1. 3

                                        So people install things in the VM, and change system configuration in the VM

                                        So your problem isn’t vagrant then, but people. Either the same people are doing the same thing with Docker, or not all things are equal?

                                        because it’s easier than vagrant up, which can take a good 20 minutes

                                        What. 20 MINUTES? What on earth are you doing that causes it to take 20 minutes to bring up a VM and provision it?

                                        There’s no reasoning about the state of Vagrant VMs in practice.

                                        You know the version of the box that it’s based on, what provisioning steps are configured to run, and whether they’ve run or not.

                                        Based on everything you’ve said, this sounds like blaming the guy who built a concrete wall, when your hammer and nails won’t go into it.

                                        1. 1

                                          I suppose the main difference is that we don’t build images for Vagrant, but instead provision the machine from a stock Ubuntu image using Ansible. It takes a good 3 minutes just to get the VirtualBox VM up, more if you have to download the Ubuntu image. From there, it’s mostly adding repos, installing deps, creating configuration. Ansible itself is rather sluggish too.

                                          Compare that to a 15 second run to get a dev environment up in Docker, provided you have the base images available.

                                          A people problem is a real problem. It doesn’t sound like you’ve used Docker for Mac/Windows, but the tool doesn’t give you a shell in the VM. And you don’t normally shell into containers.

                                          1. 1

                                            That’s interesting that it takes you 20 minutes to get to something usable. I never had that experience back when I used VMware and VirtualBox. I can’t remember having it anyway. I decided to see what getting Ubuntu up on my box takes with the new version for comparison to your experience. I did this experiment on my backup laptop: a 1.5GHz Celeron with plenty of RAM and older HD. It’s garbage far as performance goes. Running Ubuntu 16-17 (one of them…), VirtualBox, and Ubuntu 18.04 as guest in the a 1GB VM. That is, the LiveCD of Ubuntu 18.04 that it’s booting from.

                                            1. From power on to first Ubuntu screen: 5.7 seconds.

                                            2. To get to the Try or Install screen: 1 min 47 seconds.

                                            3. Usable desktop: 4 min 26 seconds.

                                            So, it’s up in under 5 minutes on the slowest-loading method (LiveCD) on some of the slowest hardware (Celeron) you can get. That tells me you could probably get even better startup time than me if you install and provision your stuff into a VirtualBox VM that becomes a base image. You use it as read-only, snapshot it, whatever the feature was. I rarely use VirtualBox these days so can’t remember. I know fully-loaded Ubuntu boots up in about a minute on this same box with the VirtualBox adding 5.7s to get to that bootloader. Your setup should just take 1-2 minutes to boot if doing it right.

                                            1. 0

                                              It takes a good 3 minutes just to get the VirtualBox VM up

                                              What? Seriously? Are your physical machines running on spinning rust or with only 1 or 2 GB of RAM or something? That is an inordinate amount of time to boot a VM, even in the POS that is Virtualbox.

                                              but the tool doesn’t give you a shell in the VM.

                                              What, so docker attach or docker exec /bin/bash are just figments of my imagination?

                                              you don’t normally shell into containers

                                              You don’t normally just change system settings willy nilly in a pre-configured environment if you don’t know what you’re doing, but apparently you work with some people who don’t do what’s “normal”.

                                              1. 2

                                                Physical machines are whatever workstation the developer uses. Typically a Macbook Pro in our case. Up until Vagrant has SSH access to the machine, I’m not holding my breath.

                                                You’re confusing shell access to the VM with shell access to containers. The Docker commands you reference are for container access.

                                                People do regularly make changes to vhost configuration, or installed packages in VMs when testing new features, instead of changing the provisioning configuration. Again, because it takes way longer to iterate on these things with VMs. And because people do these things from a shell inside the VM, spending time there, they start customizing as well.

                                                And people do these things in Docker too, and that’s fine. But we’re way more comfortable throwing away containers than VMs, because of the difference in time. In turn, it’s become much easier to iterate on provisioning config changes.

                                                1. 2

                                                  If time was a problem, sounds like the Docker developers should’ve just made VM’s faster in existing stacks. The L4Linux VM’s in Dresden’s demo loaded up about one a second on old hardware. Recently, LightVM got it down to 2.3 milliseconds on a Xen variant. Doing stuff like that also gives the fault-isolation and security assurances that only come with simple implementations which Docker-based platforms probably won’t have.

                                                  Docker seems like it went backwards on those properties vs just improving speed or usability of virtualization platforms.

                                                  1. 1

                                                    You’re confusing shell access to the VM with shell access to containers. The Docker commands you reference are for container access.

                                                    No. Your complaint is that people change configuration inside the provisioned environment. The provisioned environment with Docker isn’t a VM - that’s only there because it requires a Linux kernel to work. The provisioned environment is the container, which you’ve just said people are still fucking around with.

                                                    So your complaint still boils down to “virtualbox is slow”, and I still cannot imagine what you are doing to take twenty fucking minutes to provision a machine.

                                                    That’s closer to the time to build a base box from nothing than the time to bring up an instance and provision it.

                                                    1. 2

                                                      Look, this is getting silly. You can keep belittling every experience I’ve had, as if we’ve made these choices based on a couple of tiny bad aspects in the entire system, but that’s just not the case, and that’s not a productive discussion.

                                                      I did acknowledge that in practice Docker images a lot more things, which factors into a lot of the slowness of provisioning in the Vagrant case for us. There’s just a lot more provisioning has to do compared to Docker.

                                                      And while we could’ve gone another route, I doubt we would’ve been as happy, considering where we all are now as an industry. Docker gets a lot of support, and has a healthy ecosystem.

                                                      I see plenty of issues with Docker, and I can grumble about it all day. The IPv6 support is terrible, the process management is limited, the Docker for Mac/Windows filesystem integrations leave a lot to be desired, the security issue I mentioned in this very thread. But it still has given us a lot more positives than negatives, in terms of developer productiveness and managing our servers.

                                                      1. 1

                                                        You can keep belittling every experience I’ve had Every ‘issue’ you raised boils down to ‘vagrant+virtualbox took took to long to bring up/reprovision’. At 20 minutes, that’s not normal operation, it’s a sign of a problem. Instead of fixing that, you just threw the whole lot out.

                                                        This is like saying “I can’t work out why apache keeps crashing under load on Debian. Fuck it, I’m moving everything to Windows Server”.

                                                        But it still has given us a lot more positives than negatives The linked article seems to debunk this myth.

                                                      2. 2

                                                        I have the same experience as @stephank with VirtualBox. Every time I want to restart with a clean environment, I restart with a standard Debian base box and I run my Ansible playbooks on it. This is slow because my playbooks have to reinstall everything (I try to keep a cache of the downloaded packages in a volume on the host, shared with the guest). Docker makes this a lot easier and quicker thanks to the layer mechanism. What do you suggest to keep using Vagrant and avoid the slow installation (building a custom image I guess)?

                                                        1. 2

                                                          Please tell me “the same experience” isn’t 20 minutes for a machine to come up from nothing?

                                                          I’d first be looking to see how old the base box you’re using is. I’m guessing part of the process is an apt-get update && apt-get upgrade - some base boxes are woefully out of date, and are often hard-coded to use e.g. a US based mirror, which will hurt your update times if you’re elsewhere in the world.

                                                          If you have a lot of stuff to install, then yes I’d recommend making your own base-box.

                                                          What base-box are you using, out of interest? Can you share your playbooks?

                                                          1. 2

                                                            Creating a new VM with Vagrant just takes a few seconds, provided that the base box image is already available locally.

                                                            Provisioning (using Ansible in my case) is what takes time (installing all the services and dependencies required by my app). To be clear, in my case, it’s just a few minutes instead of 20 minutes, but it’s slow enough to be inconvenient.

                                                            I refresh the base box regularly, I use mirrors close to me, and I’ve already checked that apt-get update/upgrade terminates quickly.

                                                            My base box is debian/jessie64.

                                                            I install the usual stuff (nginx, Python, Go, Node, MySQL, Redis, certbot, some utils, etc.).

                                                            1. 2

                                                              Reading all yours comments, you seem deeply interested by convincing people that VMs are solving all the problems people think Docker is solving. Instead of debating endlessly on comments here, I’d be (truly) interested to read about your work-flow as a an ops and as a dev. I’ve finished my studies using Docker and never had to use VMs that much on my machines, so I’m not an expert and would be really interested to have a good article/post/… that I could learn from on the subject on how VM would be better than Docker.

                                    2. 1

                                      I think the point is to use something like ansible, so you put some ansible config in a git repo then you pull the repo, build the docker image, install apps, apply the config and run, all via ansible.

                                    3. 2

                                      How do you manage easily 3 different versions of PHP with 3 different version of MariaDB? I mean, this is something that Docker solves VERY easily.

                                      1. 4

                                        Maybe if your team requires 3 versions of a database and language runtime they’ve goofed…

                                        1. 8

                                          It’s always amusing to have answers pointing the legacy and saying “it shouldn’t exist”. I mean, yes it’s weird, annoying but it exists now and will exists later.

                                          1. 6

                                            it exists now and will exists later.

                                            It doesn’t have to exist at all–like, literally, the cycles spent wrapping the mudballs in containers could be spent just…you know…cleaning up the mudballs.

                                            There are cases (usually involving icky third-party integrations) where maintaining multiple versions of runtimes is necessary, but outside of those it’s just plan sloppy engineering not to try and cleanup and standardize things.

                                            (And no, having the same container interface for a dozen different snowflakes is not standardization.)

                                            1. 2

                                              I see it more like, the application runs fine, the team that was working on it doesn’t exist anymore, instead of spending time to upgrade it (because I’m no java 6 developer), and I still want to benefit from bin packing, re-scheduling, … (and not only for this app, but for ALL the apps in the enterprise) I just spend time to put it in a container, and voila. I still can deploy it in several different cloud and orchestrator without asking for a team to spend time on a project that already does the job correctly.

                                              To be honest, I understand that containers are not the solution to everything, but I keep wondering why people don’t accept that it has some utility.

                                            2. 2

                                              I think the point is that there is often little cost/benefit analysis done. Is moving one’s entire infrastructure to Docker/Kubernetes less work than getting all one’s code to run against the same version of a database? I’m sure sometimes it is, but my experience is that these questions are rarely asked. There is a status-quo bias toward solutions that allow existing complexity to be maintained, even when the solutions cost more than reducing that complexity.

                                              1. 4

                                                Totally agreed, but I’m also skeptical on the reaction of always blaming containers to add complexity. From my point of view, many things that I do with containers is way easier than if I had to do it another way (I also agree that some things would be easier without them too).

                                          2. 2

                                            Debian solves three different versions of php with Ondrej’s packages (or ppa on Ubuntu).

                                            In anything but dev or the tiniest of sites you’ll have you database server on a seperate machine anyway - what possible reason is there to have three different versions of a database server on the same host for a production environment?

                                            If you need it for testing, use lx{c,d} or vms.

                                            1. 3

                                              Especially MySQL has broken apps in the past, going from 5.5 -> 5.6, or 5.6 -> 5.7. Having a single database server means having to upgrade all apps that run on top of it in sync. So in practice, we’ve been running a separate database server per version.

                                              Can’t speak for other systems, though.

                                              1. 1

                                                As you said, testing is a good example of such use case. Then why using VMs when I can bin-pack containers on 1 (or many) machine, using less resources?

                                                1. 1

                                                  That still isn’t a reason to use it in prod, and it isn’t that different from using LXC/LXD style containers.

                                                  1. 1

                                                    Do you have rational arguments to be against Docker which is using LXC? For now I don’t see any good reason not too. It’s like saying that you don’t want to use a solution because you can use the technologies it uses underneath.

                                                    1. 6

                                                      It’s like saying that you don’t want to use a solution because you can use the technologies it uses underneath.

                                                      That’s a reasonable position though. There are people who have good reasons to prefer git CLI to Github Desktop, MySql console to PHPMyAdmin, and so forth. Abstractions aren’t free.

                                                      1. 1

                                                        Exactly! But I don’t see such hatred for people using Github Desktop or PHPmyadmin. It’s not because you don’t want to use it that it doesn’t fit the usecase of someone.

                                                        1. 1

                                                          As someone who usually ends up having to ‘cleanup’ or ‘fix’ things after someone has used something like a GUI git client or PHPMyAdmin, I wouldn’t use the word hatred, but I’m not particularly happy if someone I work with is using them.

                                                          1. 1

                                                            I can do interactive staging on the CLI, but I really prefer a GUI (and if I find a good one, would probably also use a GUI for rebasing before sending a pull request).

                                                      2. 2

                                                        If I want a lightweight machine, LXC provides that. Docker inherently is designed to run literally a single process. How many people use it that way? No, they install supervisord or whatever - at which point, what’s the fucking point?

                                                        You’re creating your own ‘mini distribution’ of bullshit so you can call yourself devops. Sorry, I don’t drink the koolaid.

                                                        1. 1

                                                          Your argument is purely flawed. You justify the initially of Docker by generalizing what a (narrow) subset of users is doing. Like I said, I’m ready to hear rational arguments.

                                                          1. 2

                                                            generalizing what a (narrow) subset of users is doing

                                                            I found you 34K examples in about 30 seconds: https://github.com/search?l=&q=supervisord+language%3ADockerfile&type=Code

                                                            1. 1

                                                              Hummm okay you got me on this one! Still, I really think there is some real utility for such a solution, even if yes it can be done in many other ways.

                                          1. 2

                                            On my Mac, I use MacPass (compatible with KeePass .kbd files) and I sync with Dropbox. On Android, I use KeePassDroid and Dropbox. I also use the password manager built-in in Chrome to sync passwords between my Mac and Android (to login in sites like Lobsters).

                                            1. 3

                                              If you ever let your computer unlocked, it takes me 4 second to retrieve a passwords from chrome built-in password manager:

                                              3-dot option button > settings > search for “pass” > click on the eye to see the password.

                                              I did steal password this way, and anyone who can use a GUI can do it.

                                              https://i.imgur.com/y7TkAy0.png

                                              1. 3

                                                Yes, I’m aware of this threat.

                                                1. 1

                                                  Then I’m ok with it, carry on if you like.

                                                  1. 2

                                                    Just to make it clear:

                                                    • I don’t let my computer unlocked.
                                                    • Chrome for Mac, in Settings > Manage passwords, asks my system password before showing a website’s password.

                                                    According to your screenshot, it looks like you are not using a Mac, but at least, it looks like the threat you mentioned doesn’t exist on Mac.

                                                    1. 1

                                                      As you knew the vulnerability, you could block the threat.

                                                      I’ll recommend this way of doing for people storing passwords on chrome and Mac. It looks like they chose great defaults for this.

                                                      1. 2

                                                        Thanks!

                                            1. 3

                                              Yes. 95% of all usages of K8S are plain silly. Like hunting mosquitos with machine guns.

                                              https://www.youtube.com/watch?v=cZvT3MHpffk

                                              “There’s nothing more dangerous than a half-configured Kubernetes cluster”

                                              Nomad is way better (like one commenter already mentioned), but sometimes I dream of openbsd installations so I wouldn’t have to worry about any of this crap.

                                              1. 1

                                                but sometimes I dream of openbsd installations so I wouldn’t have to worry about any of this crap

                                                How OpenBSD would change anything on this topic?

                                                1. 1

                                                  Mainly that containers are non-existent.

                                                  1. 1

                                                    I get it now ;-)

                                                    Then how do you isolate from each other programs living on the same server, especially when they use different versions of the same dependencies? Do you use something similar to Solaris’ Zones, FreeBSD’s jails, or Nix?

                                                    1. 2

                                                      Yes, those are pretty much the questions I ask myself as well, and the the dreaming stops ;) OpenBSD has techniques that hover around these topics (like vmm and tons of admittedly cool low-level security features like pledge), but nothing really for containerisation (except chroot).

                                                      1. 2

                                                        I am sad. I hoped you had found something I haven’t to avoid Docker complexities ;-)

                                              1. [Comment removed by author]

                                                1. 6

                                                  The only thing you’ve done in this thread is fanned the flames. You might consider re-reading @pushcx’s comment above: https://lobste.rs/s/nf3xgg/i_am_leaving_llvm#c_pwiove

                                                  1. 3

                                                    Yep. The point of codes of conduct is to legitimize and give power to particular kinds of discriminatory thoughts and behaviors, and it’s working wonders, in this case by pushing away one core contributor.

                                                    1. 1

                                                      I’m trying to understand. What is the specific wording of llvm’s CoC that legitimizes particular kinds of discrimatory thoughts and behaviors?

                                                      1. [Comment removed by author]

                                                        1. 7

                                                          If you read the follow up messages it seems like a great deal was lost for the LLVM project.

                                                    1. 7

                                                      Massive kudos to this guy for not putting up with this SJW madness. I wish him all the best!

                                                      We at suckless are heavily opposed to code of conducts and discriminatory organizations of any shape or form.

                                                      1. 11

                                                        Suckless takes a similarly principled stand against runtime config files.

                                                        1. 8

                                                          How does suckless oppose discrimination?

                                                          1. 13

                                                            It’s very simple. Any non-technological matters during software development move the software away from its ideal form. Thus, to make your software suck less, you only take the best developers no matter what race, gender, heritage, etc. these persons have.

                                                            We do not believe in equal status (i.e. e.g. forcibly obtaining a 50/50 gender ratio), as this immediately leads to discrimination. We do however strongly believe in equal rights, naturally. You also naturally cannot have both.

                                                            1. 94

                                                              Any non-technological matters during software development move the software away from its ideal form.

                                                              Suckless makes a window manager: a part of a computer that human beings, with all their rich and varying abilities and perspectives, interact with constantly. Your choices of defaults and customization options have direct impact on those humans.

                                                              For example, color schemes determine whether color-blind people are able to quickly scan active vs inactive options and understand information hierarchy. Font sizes and contrast ratios can make the interface readable, difficult, or completely unusable for visually impaired people. The sizes of click targets, double-click timeouts, and drag thresholds impact usability for those with motor difficulties. Default choices of interface, configuration, and documentation language embed the project in a particular English-speaking context, and the extent to which your team supports internationalization can limit, or expand, your user base.

                                                              With limited time and resources, you will have to make tradeoffs in your code, documentation, and community about which people your software is supportive and hostile towards. These are inherently political decisions which cannot be avoided. This is not to say that your particular choices are wrong. It’s just you are already engaged in “non-technical”, political work, because you, like everyone else here, are making a tool for human beings. The choice to minimize the thought you put into those decisions does not erase the decisions themselves.

                                                              At the community development level, your intentional and forced choices around language, schedule, pronouns, and even technical terminology can make contributors from varying backgrounds feel welcome or unwelcome, or render the community inaccessible entirely. These too are political choices. Your post above is one of them.

                                                              There is, unfortunately, no such thing as a truly neutral stance on inclusion. Consider: you wish to take only the best developers, and yet your post has already discouraged good engineers from working on your project. Doubtless it has encouraged other engineers (who may be quite skilled!) with a similar political view to your own; those who believe, for instance, that current minority representation in tech is justified, representing the best engineers available, and that efforts to change those ratios are inherently discriminatory and unjust.

                                                              Policies have impact. Consider yours.

                                                              1. 7

                                                                I don’t know if that was your goal, but this is one of the best arguments for positive discrimination I’ve read. Thanks for posting it, and also thanks for noting that all decisions have some inherent politics whether we like it or not.

                                                                Unfortunately there is simply no solution: positive discrimination is opposed to meritocracy. Forced ratios are definitely an unethical tool, as they are a form of discrimination. However, this unethical tool brings us to a greater good, which is a final product that incorporates diversity on its design and accommodates more users, which is a desirable goal on itself, for the reasons you explained.

                                                                1. 4

                                                                  color schemes determine whether color-blind people are able to quickly scan active vs inactive options and understand information hierarchy. Font sizes and contrast ratios can make the interface readable, difficult, or completely unusable for visually impaired people. The sizes of click targets, double-click timeouts, and drag thresholds

                                                                  Let me see if I understand what you’re saying. Are you claiming that when color schemes, font sizes and drag thresholds are chosen that that is a political decision? I think that many people would find that quite a remarkable claim.

                                                                  1. 3

                                                                    It’s impossible to not be political. You can be “the status quo is great and I don’t want to discuss it”, but that’s political. The open source “movement” started off political - with a strong point of view on how software economics should be changed. In particular, if you say a CoC that bans people from being abusive is unacceptable, you are making a political statement and a moral statement.

                                                                    1. 3

                                                                      It’s impossible to not be political

                                                                      Could I ask you to clarify in what sense you are using the word “political”?

                                                                      Merriam-Webster (for example) suggests several different meanings that capture ranges of activity of quite different sizes. For example, I’m sure it’s possible to act in a way which does not impinge upon “the art or science of government” but perhaps every (public) action impinges upon “the total complex of relations between people living in society”.

                                                                      In what sense did you use that term?

                                                                      1. 4

                                                                        Let’s start off with a note about honesty. FRIGN begins by telling us “We do not believe in equal status (i.e. e.g. forcibly obtaining a 50/50 gender ratio)” as if someone was proposing the use of force to produce a 50/50 gender ratio - and we all know that wasn’t proposed by anyone. There’s no way to discuss this properly if people are going to raise false issues like that. What comment’s like FRIGN’s indicate is an unwillingness to have an open and honest conversation. The same bogus rhetoric is at the heart of Damore’s memo: he claims to be in favor of equal rights and just against mythical demand for 50/50 gender equality so that he can oppose obviously ineffective affirmative action programs at Google where 80% of technical staff are male (Damore’s misappropriation of science is similarly based on an objection to a position that nobody ever argued.).

                                                                        The next point is that some people are objecting that a CoC and a minority outreach program are “political”. That’s true, but it involves the use of the more general meaning of “political” which the Collins dictionary provides as “the complex or aggregate of relationships of people in society, esp those relationships involving authority or power”. If we are using that definition, of course a CoC and a minority outreach program are political, but opposition to a CoC and a minority outreach program fits the definition as well. If you have an opinion one way or another, your opinion is political. You can’t sensibly use this wide definition of political to label the effort to adopt a CoC and to recruit more minorities and then turn around and claim your opposition to those is somehow not political. So that’s what I mean by “it is impossible to not be political”. The question is a political question and those who try to claim the high ground of being objective, disinterested, non-political for their side of the question are not being straightforward (perhaps it’s just that they are not being straightforward with themselves).

                                                                        1. 3

                                                                          I agree that a CoC, a minority outreach program, and opposition to a CoC all impinge upon “the complex or aggregate of relationships of people in society, esp those relationships involving authority or power”.

                                                                          Would you also agree that there is a popular ideological political movement in favour of CoCs (some combination of the feminist, civil rights and social justice movements)? Perhaps there is also a popular ideological movement against CoCs (some combination of MRAs and the alt right). Are you also claiming that if one claims a “neutral” stance on CoCs one is de facto supporting one of these ideologies?

                                                                          1. 3

                                                                            I’m not sure it is possible to have a neutral stance. In fact, I doubt it.

                                                                            1. 1

                                                                              Interesting! Do you also doubt it is possible to take any action that is neutral with regard to a political ideology?

                                                                              1. 3

                                                                                You are introducing something different. I don’t think you have to line up with one “side” or another, but you can’t avoid being a participant.

                                                                                1. 1

                                                                                  You said “It’s impossible to not be political” so I’m trying to understand what you mean by that. So far I’m not clear whether you think every action is political. I’d appreciate it if you’d clarify your position.

                                                                                  1. 2

                                                                                    I’m making a very concrete assertion, which I sense does not fit into your schema. My assertion is that there is no neutrality on workplace equality and inclusion for anyone involved in the workplace. Anyone who, for example, participates in an open source development effort has a position on whether efforts should be made to make it more inclusive even if that position is “this is not important enough for me to express an opinion.”

                                                                                    1. 1

                                                                                      Thank you for clarifying. When you originally said “It’s impossible to not be political” I got the wrong impression.

                                                                                      Do you also hold the same point of view when it comes to roughly comparable statements in other spheres? For example ‘Anyone who eats has a position on vegetarianism even if that position is “this is not important enough for me to express an opinion.”’?

                                                                  2. 1

                                                                    You’ve been quoted by LWN: https://lwn.net/Articles/753709/

                                                                  3. 11

                                                                    AKA shut up and hack? :)

                                                                    1. 1

                                                                      The suckless development process has no non-technical discussions?

                                                                      How are the best developers identified?

                                                                      1. 8

                                                                        just curious, why would you need to identify the best developers? Wouldn’t the quality of their code speak for that?

                                                                        1. 5

                                                                          I also fail to see what the reasoning is. Just send your code, get the non technical discussions out.

                                                                          1. -1

                                                                            Apparently, quoting @FRIGN from above, “to make your software suck less.”

                                                                          2. 8

                                                                            How are the best developers identified?

                                                                            I think this is a totally reasonable question, and one I’d like to see the answer too–if for no other reason than it might help those of us on other projects find more objective metrics to help track progress with.

                                                                            Do you all at suckless use something like:

                                                                            • defect rate
                                                                            • lines of code/feature shipped
                                                                            • execution time
                                                                            • space in memory, space in storage

                                                                            Like, what metrics do you use?

                                                                            1. 7

                                                                              You know, suckless is not a big company and the metrics that can be applied are more of a heuristic. A good developer is somebody who e.g. supplies a patch with a bug report, provides feedback to commits, makes contributions to the projects, thinks his commits through and doesn’t break stuff too often and does not personally identify with their code (i.e. is not butthurt when it’s not merged).

                                                                              What needs to be stressed here is that the metric “lines of code” is completely off. There are horrible programmers who spit out lots of code and excellent ones who over time drop more lines than they add. Especially the latter group is very present among us and thus the LOC-metric will only give false results. Same with execution time, you find that when not enough time is spent on a problem you end up solving it wrong, in the worst case having to start all over.

                                                                        2. 5

                                                                          By being very diverse and doing fackelmärsche of course. https://suckless.org/conferences/2017/

                                                                          1. 3

                                                                            @FRIGN What’s the purpose of this “torchlight hike” in the context of producing code that sucks less? Don’t you see that the activities you choose to have during your conferences are a cultural stance, and because of that, can be perceived as exclusive by programmers that don’t recognize themselves in these activities?

                                                                            1. 0

                                                                              I get your point, but must honestly say that your argument sadly aligns with the ever-excluding and self-segregating destructful nature of cultural marxism. By eating food together at the conferences, do we exclude anorexics that might otherwise be willing to attend such a conference? I don’t drink any alcohol and never have. Still, it was not a problem when we went to a local Braukeller and some people drank alcohol and others like myself didn’t.

                                                                              The fundamental point I think is that one can never fully and analytically claim that a certain process is completely unaffected by something else. If we dive down into these details we would then move on and say that the different choice of clothings, hairstyle, means of travel and means of accomodation all affect the coding process at suckless. This can be taken further and further with no limit, as we all know about the butterfly effect. At some point it is just not measurable any more.

                                                                              If you ask me, this is a gross overstretching of what I said. There are quite a lot of people who do not attend the conferences but still work together with us on projects during that time. What really matters is that we e.g. do not ignore patches from these people or give them less relevance than those of others. To pick the example up: The torchlight hike did not affect any coding decision in a direct way, but it really bonded the team further together and was a very nice memory of this conference that I and the others are very fond of from what I’ve heard. On top of that, during the hike we were able to philosophize about some new projects of which some have become a reality. The net-gain of this event thus was positive.

                                                                              In classical philosophy, there are two main trains of thought when it comes to evaluating actions: Deontology and Teleology. Deontology measures the action itself and its ethical value, completely ignoring the higher goal in the process. Teleology is the opposite, evaluating actions only by their means to reach a goal, completely ignoring the value of the action itself. The best approach obviously should be inbetween. However, there is a much more important lesson that can be taken from here: When evaluating a decision, one needs to realize what they are measuring and what is unimportant for a decision. What I meant is that to reach the goal of software perfection, the gender and other factors of the submitters do not matter. So even though we here at suckless have a goal, we are not teleologists, as we just ignore the factors that do not matter for coding.

                                                                              It is an ethical question which norms you apply to a decision.

                                                                              If we look at organizations like Outreachy, one might be mistaken to think that they are deontologists, striving to improve processes. However, after closer inspection it becomes clear that this is not the case and they are actually working towards a certain goal, increasing the number of trans and minority people in such communities. No matter how you think about this goal, it makes one thing clear: When you are working towards such a goal and also do not ignore irrelevant factors in your norms (and they in fact do by not ignoring e.g. race and gender), you quickly end up discriminating against people.

                                                                              I hope this clears this up a bit, but as a short sentence, what can be taken from here is: When discussing ethical matters, it’s always important to make clear which norms are applied.

                                                                              1. 2

                                                                                fackelmärsche

                                                                                I’m not going to wade into anything else on this, but I’d like to just take a second and let you know that, while you may not mean it in this way the phrase “cultural marxism” is very, very often used as a stand in for “jews”. Some links for the record:

                                                                                https://www.splcenter.org/fighting-hate/intelligence-report/2003/cultural-marxism-catching

                                                                                https://newrepublic.com/article/144317/trumps-racism-myth-cultural-marxism https://www.smh.com.au/world/cultural-marxism--the-ultimate-postfactual-dog-whistle-20171102-gzd7lq.html

                                                                                1. 3

                                                                                  It’s not my fault that some idiots don’t understand this term or it’s critical analysis. Cultural marxism, as the term implies, is the classical theory of marxism applied to culture. It has nothing to do with jews directly, it’s just an idea. If you know any better term to describe it, please let me know.

                                                                                  Anyway, in the philosophical realms it’s known as ‘Critical Theory’, which originated in the Frankfurt School. However, nobody knows this term.

                                                                                  Unless a better term is found, I disregard your argument and won’t accept your attempt to limit language of perfectly acceptable words to describe an idea. At the end of the day, terminology must be found that adequately describes what a certain idea is, and I see no reason why this should be wrong.

                                                                                  Regarding the torch hike: Yes, marching with torches was abused by the NSDAP as a means of political rallying. However, at least in Germany, it is a much older and deeper-reaching tradition that dates back hundreds of years.

                                                                                  1. -1

                                                                                    You have amply demonstrated that you don’t know anything about the topic. You could start with the decent Wikipedia article. https://en.wikipedia.org/wiki/Frankfurt_School

                                                                                  2. 2

                                                                                    wow, uh, kind of a weird red flag that pointing this out is getting seriously downvoted. I picked these links pretty quickly, and anybody who comes behind and reads this and wonders how serious this is, do yourself a favor and image search and see how many memes have the star of david, greedy merchant, world strangling octopus or any of a number of openly anti-semitic imagery. Its not hidden, its not coy. If you’re tossing “cultural marxism” around you’re either willfully ignoring this or blatantly playing along. Its not a thing in the world. There are no leftists (at all) who call themselves “cultural marxists”, and in fact there is a sizeable faction of marxists who are openly disdainful of any marxism that eschews political struggle. The new republic article linked above goes into this, Perry Andersons “Considerations on Western Marxism”, a well known, well regarded text across a number of marxist subsects, is explicitly based on this. Anyway, enjoy contributing to a climate of increasing hostility toward jews. good stuff.

                                                                                    edit: have some fun with this https://www.google.com/search?q=cultural+marxism&client=firefox-b&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjz2tWrhvnaAhUJ7YMKHVgcCccQ_AUIDCgD&biw=1247&bih=510#imgrc=_

                                                                                    1. 1

                                                                                      The term ‘Cultural Marxism’ describes very well what it is, and not all leftists are cultural marxists. The classical theory of marxism, roughly spoken, is to think of society as being split in two camps, the Proletariat and the Bourgeoisie, eternally involved in a struggle, where the former is discriminated against and oppresed by the latter.

                                                                                      Cultural Marxism applies these ideas to society. In the Frankfurt School it was called ‘Critical Theory’, calling people out to question everything that was deemed a cultural norm. What is essentially lead to was to find oppressors and oppressed, and we reached the point where e.g. the patriarchy oppressed against women, white people against minorities, christians against muslims and other religions and so forth. You get the idea. Before you go again rallying about how I target jews or something please take a note that up to this point in this comment, I have just described what cultural marxism is and have not evaluated or criticized it in any way, because this here is the wrong platform for that.

                                                                                      What you should keep in mind is that the nature of cultural marxism is to never be in a stable position. There will always be the hunt for the next oppressor and oppressed, which in the long run will destroy this entire movement from the inside. It was a friendly advice from my side to you not to endulge in this separatory logic, but of course I understand your reasoning to the fullest.

                                                                                      Just as a side note: I did not see you getting ‘seriously’ downvoted. What do you mean?

                                                                                      1. 2

                                                                                        It’s uncommon to find such a well-put explanation; thanks for that.

                                                                                        There will always be the hunt for the next oppressor and oppressed, which in the long run will destroy this entire movement from the inside.

                                                                                        If the movement runs out of good targets (and falls apart because they can’t agree on new ones), wouldn’t that imply that it will self-destruct only after it succeeds in its goals? That doesn’t sound like a bad thing.

                                                                                        1. 1

                                                                                          I’m glad you liked my explanation. :)

                                                                                          That is a very interesting idea, thanks for bringing this thought up! It’s a matter dependent on many different factors, I suppose. It might fall apart due to not being able to agree on new targets or when everybody has become a target, but it is a very theoretical question which one of these outcomes applies here.

                                                                                        2. 1

                                                                                          Generally people who use “cultural marxism” as a pejorative are sloganeering. The idea of an “eternal struggle” is completely foreign to any kind of marxism which is based on a theory that classes come out of the historical process and disappear due the historical process. Marxism claims that the proletariat and bourgeosie are temporary divisions that arise from a certain type of economic organization. Whatever one thinks of that idea, your characterization of Marxism is like describing baseball as a game involving pucks and ice. Your summary of “cultural marxism” is even worse. Maybe take a class or read a decent book.

                                                                                          1. 0

                                                                                            Did you actually read any of the links I posted? Specifically the New Republic and SPLC links? I don’t know how else to say this and you pretty much side stepped what I said the first time so I’ll try to reiterate it: There is no such thing as “Cultural Marxism”. At all. Its not a descriptive category that any marxist actually self applies or applies to other marxists. I’m fully aware of the Frankfurt School, Adorno, Horkheimer, etc. I’ve read some of them and many, many of their contemporaries from Germany, people like Karl Mannheim. I read marxist publications everyday, from here in the states and from Europe. I’m a member of an explicitly marxist political party here in the states. I can’t emphasize this enough, “cultural marxism” isn’t real and is roughly on par with “FEMA camps”, “HARRP rays” and shape shifting lizard jews, meaning; its a far far right wing paranoid fantasy used to wall off people from other people and an actual understanding of the material conditions of their world. I also didn’t say, specifically in fact pointing out that I wasn’t saying this, that you were “targeting jews”. That being said, if you use a phrase that has its origins in anti-semitic polemics, is used explicitly and over-whelmingly by anti-semites, than that is on you. (Did you take a look at the linked image search? Does that sort of thing not give you pause?) To say that you “just described what cultural marxism is” is also inaccurate, you absolutely used it in a descriptive way

                                                                                            I get your point, but must honestly say that your argument sadly aligns with the ever-excluding and self->segregating destructful nature of cultural marxism.

                                                                                            White supremacist organizing is experiencing an enormous upsurge, not only here in the states but in Europe as well. From Le Pen to AfD to SVO in Austria and on and on. These people are not interested in polite conversation and they’re not using “cultural marxism” as a category to illuminate political opponents, its meant to denigrate and isolate, ironically given thats exactly what Neo Nazis and white supremacists here in the states accuse left wingers and “SJWs” of doing.

                                                                                            I appreciate that you’re discussing this peacefully but I’m going to bow out of this thread unless you’re interested enough to take some time and read the links

                                                                                            FWIW these also dismantle the trope and point out pretty much exactly what I’m saying around anti-semitism: https://www.vice.com/en_us/article/78mnny/unwrapping-the-conspiracy-theory-that-drives-the-alt-right https://www.theguardian.com/commentisfree/2016/feb/22/chris-uhlmann-should-mind-his-language-on-cultural-marxism

                                                                                            1. 2

                                                                                              I took some more time to read it up and from what I could see, I found that indeed cultural marxism has become more of a political slogan rather than a normal theoretical term in the USA.

                                                                                              Here in Germany the term “Kulturmarxismus” is much less politically charged from what I can see and thus I was surprised to get this response after I just had “translated” this term into English. It might be a lesson to first get some background on how this might be perceived internationally, however, it is a gigantic task for every term that might come around to you.

                                                                                              So to reiterate my question, what term could be better used instead? :)

                                                                                              1. 1

                                                                                                interesting that it has a different grounding/connotation in Germany, but then again I’m not surprised since thats where its supposed to have originated from. I’ll reread your other posts and come up with a response thats fair. Thanks for taking the time to read those links.

                                                                              2. 17

                                                                                I’m not going to remove this because you’re making a public statement for suckless, but please don’t characterize positions you disagree with as madness. That kind of hyperbole generally just leads to unproductive fights.

                                                                                1. 9

                                                                                  Please don’t remove anything unless it’s particularly vulgar…

                                                                                  1. [Comment removed by author]

                                                                                    1. 3

                                                                                      hey that’s my account you’re talking about!

                                                                                  2. -1

                                                                                    Removing differing viewpoints? It is precisely this kind of behavior that maddens people who complain about SJW, who (the SJW) seem unable to take any discussion beyond calling their opponent’s position “evil”, “alt-right”, “neo-nazi”, or, if they are exceptionally well-spoken, “mad”.

                                                                                    1. 14

                                                                                      No, removing abuse and hyperbole that acts as flamebait regardless of the political opinions expressed. So far I’ve removed one post and hope not to remove more.

                                                                                      1. 2

                                                                                        It’s hard for me to see a reason to remove things when we have the voting system in place, neither are perfect but one is at your sole discretion whereas the other is the aggregate opinion of the users.

                                                                                        1. 21

                                                                                          Voting isn’t a replacement of moderation. It helps highlight and reward good comments and it can punish bad comments, but it’s not sufficient for running a community. I’m trying to head off places where people give up on argument and just try to hurt or tar the people they disagree with because it doesn’t lead to a good community. Lobsters is a very good place for discussing computing and I haven’t seen that in communities this size with hands-off moderation (but I’d love counter-examples to learn from!) From a quick query, we’ve had comments from 727 unique users in the last 30 days and there’s around 15k unique IPs in the logs per weekday, so people are constantly interacting with the others who don’t know their background, don’t share history, can’t recognize in-jokes, simply don’t have reason to trust when messages are ambiguous, let alone provocative. Friendly teasing like “ah yeah, you would think that” or “lol php sucks” that’s rewarding bonding in a small, familiar group hurts in a big one because even if the recipient gets the joke and laughs along or brushes it off as harmless, it’s read by thousands of people who don’t or can’t.

                                                                                          1. 2

                                                                                            Lobsters is a very good place for discussing computing and I haven’t seen that in communities this size with hands-off moderation

                                                                                            I support your position on sub-topic but even my Trial you linked to shows a bit otherwise on just this point. This site has more flexible, hands-off moderation than many I’ve seen with this much political dispute. Even in that link, we saw an amount of honest, civility, and compromise I don’t usually see. There’s been quite a bit better results in this thread than usual elsewhere. There seems to be enough community closeness despite our size that people are recognizing each others positions a bit. Instead of comments, you can actually see it by what’s not said more since it’s prior ground we’ve covered. The others are learning as discussion furthers. Then, there’s the stuff we don’t want which seems to be basically what those individuals are intending in a way that has nothing to do with site’s size.

                                                                                            So, I support you getting rid of just pure abuse, trolling, sockpuppeting, etc. I don’t think we’ve hit the full weaknesses and limited vision of large sites yet despite our increase in comments and views. We’re still doing a lot better than average. We’re still doing it with minimal intervention on things like politics relative to what I’ve seen elsewhere. I think we can keep at current moderation strategy for now because of that. For now.

                                                                                            Just wanted to say that in the middle of all this.

                                                                                            1. 0

                                                                                              Voting isn’t a replacement of moderation. It helps highlight and reward good comments and it can punish bad comments, but it’s not sufficient for running a community.

                                                                                              I’m not sure if I see why it’s not a good replacement. To me, I see voting as distributed moderation and the “real” moderation is automatically hiding (not removing) comments when they fall below a threshold.

                                                                                              I’m trying to head off places where people give up on argument and just try to hurt or tar the people they disagree with because it doesn’t lead to a good community.

                                                                                              I think this method relies on an accurate crystal ball where you can foresee people’s actions and to an extent, the reactions of the people reading the comments.

                                                                                              I’d have to question what you mean by “a good community”, it seems like it’s just a place where everyone agrees with what you agree with and those that disagree aren’t heard because it risks offending those that do agree.

                                                                                              I think the best discussions on here are because we have many people with wide and varied opinions and backgrounds. The good comes from understanding what someone else is saying, not excluding them from the discussion. The only places I see that warranted is where someone has said something purposely and undeniably vile.

                                                                                              1. 8

                                                                                                The automatic hiding of low-scoring comments is also a “sole discretion” thing; jcs added it and I tweaked it a few months ago. The codebase enforces a lot of one moderator’s ideas of what’s good for a community in a hands-off way and the desire to do that motivated its creation.

                                                                                                I strongly agree that a community where everyone agrees with the moderator would be bad one, even if I am that moderator. It’s tremendously rewarding to understand why other people see things differently, if for no other reason than the selfish reason that one can’t correct learn or correct mistakes if one never sees things one doesn’t already agree with.

                                                                                                I think the crystal ball for foreseeing problems is experience, from many years of reading and participating in communities as they thrive or fail. I think it’s possible to recognize and intervene earlier than the really vile stuff because I’ve seen it work and I’ve seen its absence fail. I keep asking for examples of excellent large communities without active moderators because I haven’t seen those, and after a couple decades and a few hundred communities I see the anthropic principle at work: they don’t exist because they self-destruct, sink into constant vileness, or add moderation. At best they have maintain with signal-to-noise ratios far below that of Lobsters where the thoughtful commentary is crowded out by trolling, running jokes, ignorance, and plan low-quality comments because it doesn’t seem worth anyone’s while to care when posting.

                                                                                                But moderation is not a panacea in and of itself. Without good experience, judgment, and temper a bad moderator swiftly destroys a community, and this is a very common way communities fail. If it helps any, the author of the comment I removed agrees that it wasn’t done to suppress their opinion.

                                                                                                1. 1

                                                                                                  The benefit I see from moderation being part of the codebase is that it’s public, predictable and repeatable (it terms of reliability). When you take moderation decisions into your own discretion many of these virtues are lost.

                                                                                                  As for experience, I think that’s tricky because it can easily lead you to making the same mistake twice. It’s also made of your personal experiences and you’re using that to curate the discussion of other people, I would caution that it’s another method of controlling dialog (perhaps subconsciously) to what you find acceptable, not necessarily what’s best for everyone.

                                                                                                  1. 3

                                                                                                    The benefit I see from moderation being part of the codebase is that it’s public, predictable and repeatable (it terms of reliability). When you take moderation decisions into your own discretion many of these virtues are lost.

                                                                                                    Most of them go into the Moderation Log. I’ve been watching it since the jcs days since it’s what folks are supposed to do in a transparent, accountable system. Gotta put effort in. I haven’t seen much of anything that bothered me. The bans and deletes I’ve been able to follow @pushcx doing were trolling, alleged sockpuppeting, and vicious flamewaring. Some I couldn’t see where I’d rather the resource go off the front page rather getting deleted so someone looking at logs could see it for whatever it was. Nonetheless, his actions in the thread about me, the general admining, and what I’ve seen in moderation have been mostly good. A few really good like highlighting the best examples of good character on the site. I think he’s the only one I’ve seen do that on a forum in a while.

                                                                                                    You have little to worry about with him in my opinion at the moment. Do keep an eye on the comments and log if you’re concerned. Scrape them into version storage if concerned about deletions. What goes on here is pretty public. Relax or worry as much as you want. I’m more relaxed than worried. :)

                                                                                                    1. 3

                                                                                                      Yeah, I agree on the pitfalls of experience. As SeanTAllen noted in a separate branch of this thread a minute ago, there’s “but you didn’t say” and other wiggle room; I think that’s where automatic moderation falls down and human judgment is required. Voting has its own downsides like fads, groupthink, using them to disagree (which is all over this thread), in-jokes, a drifting definition of topicality, all the parallels to the behaviors of political rhetoric, etc. Lobsters has never been voting only and I don’t see a compelling reason to change that. jcs’s involvement in the site was steadily declining so I’m certainly more actively moderating, but I don’t see that as a change in character. I guess what it comes down to is that I agree with you about what successful communities do and don’t look like, but I haven’t seen one that works on the model you’ve outlined and I don’t see that kind of fundamental change as a risk worth taking.

                                                                                          2. 1

                                                                                            So FRIGN writes to oppose “SWJ madness”, and you chime in to complain that “SWJ” calls opponents “mad”. Are you calling FRIGN “SWJ” or what? It’s kind of hard to discern your point in that cloud of grievance.

                                                                                            1. 1

                                                                                              “SJW” for “social justice warrior.”

                                                                                              @COCK is sarcastically non-replying because you typo’ed.

                                                                                              1. 2

                                                                                                Not exactly, I was sarcastically non-replying because I assumed he was intentionally misunderstanding me. I assumed this because I didn’t see any ambiguity in my answer. On later inspection I noticed the ambiguity so I gave an actual reply:

                                                                                                https://lobste.rs/s/nf3xgg/i_am_leaving_llvm#c_yzwuux

                                                                                                1. 1

                                                                                                  The interesting thing is how people agreeing with Mr. cock pile on the insults against the people who they complain are insulting them by forcing them to sign on to codes of conduct which prohibit insults. It’s almost as if there was a good reason for those codes.

                                                                                                  1. 1

                                                                                                    I doubt the irony is lost on anyone supporting a CoC.

                                                                                                2. -1

                                                                                                  Yes, I’m calling FRIGN a “SWJ”.

                                                                                                  1. -1

                                                                                                    Yes, well, one sympathizes with your plight.

                                                                                                    1. 2

                                                                                                      Ah now I see the ambiguity: “people who complain about SJW, who…” the “who” referred to the “SJW”, not the “people”

                                                                                                3. 1

                                                                                                  The only comment that was removed was against FRIGN point of view. Nobody is removing differing point of view, just enforcing civil discussion.

                                                                                              2. [Comment removed by author]

                                                                                                1. 4

                                                                                                  “We at suckless are heavily opposed to code of conducts and discriminatory organizations of any shape or form.”

                                                                                                2. 4

                                                                                                  It’s responses like yours that really make the case for codes of conduct.

                                                                                                  1. 2

                                                                                                    Are you speaking for the group or is that your own opinion? Knowing that the group aligns itself with that position would certainly make me not interested in working with it or contributing.

                                                                                                    1. 6

                                                                                                      To be fair, suckless is not well-organised enough to be a group that can have a single opinion to be spoken for.

                                                                                                      That said, FRIGN is a prominent contributor and I from what I’ve seen most contributors are heavily on the side of “the code will speak for itself”.

                                                                                                  1. 39

                                                                                                    I don’t understand the author’s objection to Outreachy. As far as I can tell, they want to fund some interns from marginalized groups so that they can work on open-source. They are not preventing the author from working on open-source. They are not preventing the author from funding interns he approves of from working on open-source. What is the problem?

                                                                                                    1. 22

                                                                                                      Outreachy funds members of specific minority groups and would not fund a cisgender white guy’s internship. He decries this as discrimination.

                                                                                                      On this topic, the term discrimination has differing interpretations and it’s very easy for folks to talk past each other when it comes up. It sounds he’s using it in a way that means disfavoring people based on the sex or race they belong to. Another popular definition is that it only applies to actions taken against groups that have been historically discriminated against. This use gets really strong pushback from people who disagree with the aims or means of projects like Outreachy as begging the question, making an assumption that precludes meaningful discussion of related issues.

                                                                                                      1. 4

                                                                                                        It’s not only that Outreachy would not fund a cisgender white guy’s internship. Outreachy also would not fund Asian minority’s internship. Asian minority is a group that has been historically discriminated against. Outreachy is discriminating against specific minority. In summary, Outreachy is simply discriminating, it is not using alternative definition of discrimination.

                                                                                                        (Might be relevant: I am Asian.)

                                                                                                        1. 7

                                                                                                          I asked Karen Sandler. This is the reason for the selection of groups:

                                                                                                          <karenesq> JordiGH: I saw the lobsters thread. the expansion within the US to the non-gender related criteria was based on the publication by multiple tech companies of their own diversity statistics. We just expanded our criteria to the groups who were by far the least represented.

                                                                                                          1. 2

                                                                                                            Thanks a lot for clarifying this with Karen Sandler!

                                                                                                            I think this proves beyond any shade of doubt that Outreachy is concerned with not historical injustice, but present disparity.

                                                                                                          2. 3

                                                                                                            He had a pretty fair description of where the disputes were coming from. Far as what you’re saying on Outreachy, the Asian part still fits into it as even cultural diversity classes I’ve seen say the stereotypes around Asians are positive for stuff like being smart or educated. Overly positive to the point that suicide due to pressure to achieve was a bit higher according to those sources. There’s lots of Asians brought into tech sector due to a mix of stereotypes and H1-B. The commonness of white males and Asians in software development might be why they were excluded with the white males. That makes sense to me if I look at it through the view they likely have of who is privileged in tech.

                                                                                                            1. 3

                                                                                                              Yes, it makes sense that way, but it does not make sense in “historical discrimination” sense pushcx argued. I believe this is an evidence that these organizations are concerned with the present disparity, not with the history. Therefore, I believe they should cease to (dishonestly, I think) argue history argument.

                                                                                                            2. 2

                                                                                                              Well, if you were a woman or identified as one they would accept you, regardless if you were Asian or not. I do wonder why they picked to outreach to the particular groups they picked.

                                                                                                              And you have to pick some groups. If you pick none/all, then you’re not doing anything different than GSoC, and there already is a GSoC, so there would be no point for Outreachy.

                                                                                                              1. 1

                                                                                                                You can pick groups that have been historically discriminated against, as pushcx suggested. Outreachy chose otherwise.

                                                                                                                1. 2

                                                                                                                  To nitpick, I was talking about the term “discrimination” because I’ve seen it as a source of people talking past each other, not advocating for an action or even a particular definition of the term. Advocating my politics would’ve compromised my ability to effectively moderate, though incorrect assumptions were still made about the politics of the post I removed and that I did so out of disagreement, so… shrug

                                                                                                          3. 49

                                                                                                            For those who are used to privilege, equality feels like discrimination.

                                                                                                            1. 18

                                                                                                              I think the author’s point is that offering an internship for only specific groups is discrimination. From a certain point of view, I understand how people see it that way. I also understand how it’s seen as fair. Whether that’s really discrimination or not is up for debate.

                                                                                                              What’s not up for debate is that companies or people should be able to give their money however they feel like it. It’s their money. If a company wants to only give their money to Black Africans from Phuthaditjhaba, that’s their choice! Fine by me!

                                                                                                              Edit: trying to make it clear I don’t want to debate, but make the money point.

                                                                                                              1. 18

                                                                                                                It is discrimination, that’s what discrimination means. But that doesn’t automatically make it unfair or net wrong.

                                                                                                                1. 12

                                                                                                                  The alternative is inclusive supply plus random selection. You identify the various groups that exist. Go out of your way to bring in potential candidates of a certain number in each one. The selection process is blind. Whoever is selected gets the help. Maybe auditable process on top of that. This is a fair process that boosts minorities on average to whatever ratio you’re doing the invite. It helps whites and males, too.

                                                                                                                  That’s the kind of thing I push. Plus, different ways to improve the blindness of the evaluation processes. That is worth a lot of research given how much politics factors into performance evaluations in workplaces. It affects everyone but minority members even more per the data. Those methods, an equal pull among various categories, and blind select are about as fair as it gets. Although I don’t know exact methods, I did see GapJumpers describing something that sounds closer to this with positive results. So, the less-discriminating way of correcting imbalances still achieves that goal. The others aren’t strictly necessary.

                                                                                                                  The next scenario is specific categories getting pulled in more than everyone with organizations helping people in the other ones exclusively to boost them. That’s what’s going on here. Given the circumstances, I’m not going to knock them even if not as fair as other method. They’re still helping. It looks less discriminatory if one views it at a high level where each group addresses those they’re biased for. I did want to show the alternative since it rarely gets mentioned, though.

                                                                                                                  1. 13

                                                                                                                    I really agree with this. I was with a company who did a teenage code academy. I have a masters, and did a lot of work tutoring undergrads and really want to get back into teaching/academia.

                                                                                                                    I wanted to teach, but was actually pushed down the list because they wanted to give teaching positions to female staff first. I was told I could take a support role. The company also did a lot of promotion specifically to all girls schools and to try to pull women in. They had males in the classes too, but the promotion was pretty bias.

                                                                                                                    Also I want to point out that I had a stronger teaching background/qualifications than some of the other people put in those positions.

                                                                                                                    I’m for fairness and giving people opportunity, but I feel as if efforts to stop discrimination just lead to more discrimination. The thing is, we’re scientists and engineers. We know the maths. We can come up with better ways to pull in good random distributions of minorities/non-minorities and don’t have to resort to workshops that promote just another equal but opposite mono-culture. If anything you do potential developers a disservice by having workshops that are only women instead of half-and-half. You get a really one sided narrative.

                                                                                                                    1. 9

                                                                                                                      I appreciate you sharing that example. It mirrors some that have happened to me. Your case is a good example of sexism against a man that might be more qualified than a women being hired based on gender. I’ll also note that so-called “token hires” are often treated poorly once they get in. I’ve seen small organizations where that’s not true since the leadership just really believed in being good to people and bringing in different folks. They’re rare. Most seem to be environments people won’t want to be in since conflict or resentment increases.

                                                                                                                      In your case and most of those, random + blind selection might have solved the problem over time without further discrimination or resentment. If process is auditable, everyone knows the race or gender part gave everyone a fair shot. From there, it was performance. That’s a meaningful improvement to me in reducing the negative effects that can kick in when correcting imbalances. What I will say, though, is I don’t think we can always do this since performance in some jobs is highly face-to-face, based on how groups perceive the performer, etc. I’m still uncertain if something other than quotas can help with those.

                                                                                                                      Most jobs I see people apply for can be measured, though. If it can be measured, it can sometimes already be blinded or may be measured blindly if we develop techniques for that.

                                                                                                                      1. 3

                                                                                                                        I agree with these comments, plus, thanks for sharing a real life example. We are definitely fighting discrimination with more discrimination doing things the current way. For a bit I’ve thought that a blind evaluation process would be best. It may not be perfect, but it seems like a step in a better direction. It’s encouraging to see other people talking about it.

                                                                                                                        One other thought- I think we as society are handling race, gender, age, etc problems wrong. Often, it’s how a certain group ‘A’ has persecuted another group ‘B’. However, this isn’t really fair for the people in group ‘A’ that having nothing to do with what the other people are doing. Because they share the same gender/race/whatever, they are lumped in. Part of this seems to be human nature, and it’s not always wrong. But maybe fighting these battles in more specific cases would help.

                                                                                                                      2. 5

                                                                                                                        I think the problem here is that whites and males don’t need extra help. They already get enough help from their position in society. Sure, equal distribution sounds great, but adding an equal amount to everyone doesn’t make them equal; it doesn’t nullify the discrepancy that was there before. Is it good to do so? Yes, of course, but it would be better served and better for society to focus on helping those without built-in privilege to counteract the advantage that white males have.

                                                                                                                        1. 9

                                                                                                                          There are lots of people in bad situations who are white and male. Saying someones race and gender determines how much help someone has had in life seems both racist and sexist.

                                                                                                                          1. 2

                                                                                                                            I’m not saying that it applies in all circumstances. But I am saying that they have a much larger support structure available to them, even if they didn’t get started on the same footing as other examples.

                                                                                                                            It’s not directly because of their race and sex, it’s because of their privilege. That’s the fundamental difference.

                                                                                                                            1. 6

                                                                                                                              I don’t even know how much it matters if it was true. Especially in rural or poor areas of white people. Their support structure is usually some close friends, family, people they live with, and so on. Often food stamps, too. Their transportation or Internet might be unreliable. Few jobs close to them. They have to pack up and leave putting themselves or their family into the unknown with about no money to save for both the move and higher cost of living many areas with more jobs will entail. Lots of drug abuse and suicide among these groups relative to whites in general. Most just hope they get a decent job where management isn’t too abusive and the lowish wages cover the bills. Then, you talk about how they have “a much larger support structure available to them” “because of their privilege.” They’d just stare at you blinking wondering what you’re talking about.

                                                                                                                              Put Your Solutions Where Your Ideology Is

                                                                                                                              Since you talk about advantages of privilege and support structures, I’m curious what you’d recommend to a few laypeople in my white family who will work, have basic to good people skills, and are non-technical. They each have a job in area where there aren’t lots of good jobs. They make enough money to make rent. I often have trouble contacting them because they “have no minutes” on their phones. The areas they’re in have no wired Internet directly to renters (i.e. pay extra for crap), satellite, spotty connections, or they can’t afford it. Some have transportation, others lost theirs as it died with four digit repairs eclipsing 1-2 digits of surplus money. All their bosses exploit them to whatever extent possible. All the bosses underschedule them where the work couldn’t get done then try to work them to death to do it. The schedules they demand are horrible with at least two of us having schedules that shift anywhere from morning to evening to graveyard shift in mid-week. It kills people slowly over time. Meanwhile, mentally drains them in a way that prevents them learning deep stuff that could get them in good jobs. Most of them and their friends feel like zombies due to scheduling with them just watching TV, chilling with friends/family, or something otherwise comfortable on off days. This is more prevalent as companies like Khronos push their optimizations into big businesses with smaller ones following suit. Although not among current family now, many of them in the past worked 2-3 jobs with about no time to sleep or have fun just to survive. Gets worse when they have an infant or kids.

                                                                                                                              This is the kind of stuff common among poor and working classes throughout America, including white people. Is this the average situation of you, your friends, and/or most white males or females you know of? These people “don’t need help?” I’m stretching my brain to try to figure out how what you’re saying fits their situation. In my view, they don’t have help so much as an endless supply of obstacles ranging from not affording bills to their evil bosses whose references they may depend on to police or government punishing them with utility bill-sized tickets for being poor. What is your specific recommendation for white people without any surplus of money, spotty Internet, unreliable transportation, and heavily-disrupted sleep?

                                                                                                                              Think quickly, too, because white people in these situations aren’t allowed much time to think between their stressful jobs (often multiple) and families to attend to. Gotta come up with solutions about on instinct. Just take the few minutes of clarity a poor, white person might have to solve a problem while in the bathroom or waiting in line at a store. It’s gotta work with almost no thought, energy, savings, or credit score. What you got? I’ll pass it on to see if they think it’s hopeful or contributes to the entertainment for the day. Hope and entertainment is about the most I can give to the person I’m visiting Saturday since their “privilege” hasn’t brought them much of anything else.

                                                                                                                              1. 2

                                                                                                                                I’m not saying that it’s applicable in every situation; I am specifically talking about the tech industry. I don’t think it’s about prejudice in this case. I think it’s about fixing the tech culture, which white males have an advantage in, regardless of their economic background. White males don’t always have privilege, that would be a preposterous claim. But it’s pretty lopsided in their favor.

                                                                                                                                1. 2

                                                                                                                                  I am specifically talking about the tech industry.

                                                                                                                                  It’s probably true if narrowed to tech industry. It seems to favor white and Asian males at least in bottom roles. Gets whiter as it goes up. Unfortunately, they also discriminate more heavily on age, background, etc. They want us in there for the lower-paying stuff but block us from there in a lot of areas. It’s why I recommend young people considering tech avoid it if they’re worried about age discrimination or try to move into management at some point. Seems to reduce the risk a bit.

                                                                                                                                2. 2

                                                                                                                                  Your comment is a great illustration of the danger of generalizing things on the basis of racis or gender, mistakenly classifying a lot of people as “privileged”. Ideally, the goal of a charity should be to help unprivileged people in general, for whatever reason they are unprivileged, not because of their race or gender.

                                                                                                                                3. 4

                                                                                                                                  “It’s not directly because of their race and sex, it’s because of their privilege. That’s the fundamental difference.”

                                                                                                                                  But that’s not a difference to other racist/sexist/discriminatory thinking at all. Racists generally don’t dislike black people because they’re black. They think they’re on average less intelligent, undisciplined, whatever, and that this justifies discriminating against the entirety of black people, treating individuals primarily as a product of their group membership.

                                                                                                                                  You’re doing the exact same thing, only you think “white people are privileged, they don’t need extra help” instead of “black people are dumb, they shouldn’t get good jobs”. In both cases the vast individual differences are ignored in favor of the superficial criteria of group membership. That is exactly what discrimination is.

                                                                                                                                  1. 2

                                                                                                                                    You’re right in that I did assume most white males are well off, and it is a good point that they need help too. However, I still think that the ideas of diversifying the tech industry are a worthy goal, and I think that having a dedicated organization that focuses on only the underrepresented groups is valuable. I just don’t think that white males have the same kind of cultural bias against them in participating in this industry that the demographics that Outreachy have, and counteracting that is Outreachy’s goal. Yes, they are excluding groups, but trying to help a demographic or collection of demographics necessarily excludes the other demographic. How could it work otherwise?

                                                                                                                              2. 1

                                                                                                                                Why exclude Asians then? Do Asians also already get enough help from their position in society?

                                                                                                                                1. 5

                                                                                                                                  Asians are heavily overrepresented in tech. To be fair, the reason we are overrepresented in tech (as in medicine) is likely because software development (like medicine) is an endeavour that requires expertise in challenging technical knowledge to be successful, which means that (unlike Hollywood) you can’t just stick with white people because there simply aren’t enough of them available to do all the work. So Asians who were shut out of other industries (like theatre) flocked to Tech. Black men are similarly overrepresented in the NBA but unfortunately the market for pro basketball players is a bit smaller than the market for software developers.

                                                                                                                                  1. 2

                                                                                                                                    Do they exclude Asians? I must have missed that one. I don’t think excluding that demographic is justified.

                                                                                                                                    1. 2

                                                                                                                                      Do they exclude Asians?

                                                                                                                                      Yes they do. Quoting Outreachy Eligibility Rules:

                                                                                                                                      You live in the United States or you are a U.S. national or permanent resident living aboard, AND you are a person of any gender who is Black/African American, Hispanic/Latin@, Native American/American Indian, Alaska Native, Native Hawaiian, or Pacific Islander

                                                                                                                                      In my opinion, this is carefully worded to exclude Asians without mentioning Asians, even going so far as mentioning Pacific Islander.

                                                                                                                              3. 4

                                                                                                                                It’s a simple calculus of opprotunity. Allowing those who already have ample opprotunity (i.e. white, cis, males) into Outreachy’s funding defeats the point of specifically targeting those who don’t have as much opprotunity. It wouldn’t do anything to help balance the amount of opprotunity in the world, which is Outreachy’s end goal here.

                                                                                                                                It’s the author’s idea that they deserve opprotunity which is the problem. It’s very entitled, and it betrays that the author can’t understand that they are in a priviledged position that prevents them from receiving aid. It’s the same reason the wealthy don’t need tax cuts.

                                                                                                                                1. 1

                                                                                                                                  Outreachy’s end goal seems to be balancing the amount of opportunity in the world for all, except for Asian minority.

                                                                                                                                  1. 4

                                                                                                                                    Each of us gets to choose between doing good and doing best. The x is the enemy of the y. If Outreachy settles for acting against the worst imbalance (in its view) and leaving the rest that’s just their choosing good over best.

                                                                                                                                    You’re also confusing their present action with their end goals. Those who choose “best” work directly towards their end goal, but Outreachy is in the “good” camp. By picking a worst part of the problem and working on that part, they implicitly say that their current work might be done and there’ll still be work to do before reaching the end goal.

                                                                                                                                2. 4

                                                                                                                                  What’s not up for debate is that companies or people should be able to give their money however they feel like it.

                                                                                                                                  That is debatable. But, I too think Outreachy is well within their rights.

                                                                                                                                3. 6

                                                                                                                                  I’m not going to complain about discrimination in that organization since they’re a focused group helping people. It’s debatable whether it should be done differently. I’m glad they’re helping people. I will note that what you just said applies to minority members, too. Quick example.

                                                                                                                                  While doing mass-market, customer service (First World slavery), I ran an experiment treating everyone in a slightly-positive way with no differences in speech or action based on common events instead of treating them way better than they deserved like we normally did. I operated off a script rotating lines so it wasn’t obvious what I was doing. I did this with different customers in new environment for months. Rather than appreciation, I got more claims of racism, sexism, and ageism then than I ever did at that company. It was clear they didn’t know what equal treatment or meritocracy felt like. So many individuals or companies must have spoiled them that experiencing equality once made them “know” people they interacted with were racist, sexist, etc. There were irritated people among white males but they just demanded better service based on brand. This happened with coworkers in some environments, too, when I came in not being overly selfless. The whites and males just considered me slightly selfish trading favors where a number of non-whites or women suspected it was because they were (insert category here). They stopped thinking that after I started treating them better than other people did and doing more of the work myself. So, it was only “equal” when the white male was doing more of the work, giving more service in one-way relationships, etc.

                                                                                                                                  I’d love to see a larger study done on that kind of thing to remove any personal or local biases that might have been going on. My current guess is that their beliefs about what racism or sexism are shifted their perceptions to mis-label the events. Unlike me, they clearly don’t go out of their way to look for more possibilities for such things. I can tell you they often did in the general case for other topics. They were smart or open-minded people. Enter politics or religion, the mind becomes more narrow showing people what they want to see. I spent most of my life in that same mental trap. It’s a constant fight to re-examine those beliefs looking at life experiences in different ways.

                                                                                                                                  So, I’m skeptical when minority members tell me something was about their status because I’ve personally witnessed them miscategorizing so many situations. They did it by default actually any time they encountered provable equality or meritocracy. Truth told, though, most things do mix forms of politics and merit leaning toward politics. I saw them react to a lot of that, too. I’m still skeptical since those situations usually have more political biases going on than just race or gender. I can’t tell without being there or seeing some data eliminating variables what caused whatever they tell me.

                                                                                                                                  1. 17

                                                                                                                                    So, in your anecdotal experience, other people’s anecdotal experience is unreliable? 😘

                                                                                                                                    1. 5

                                                                                                                                      You got jokes lol. :) More like I’m collecting this data on many views from each group to test my hypotheses whereas many of my opponents are suppressing alternative views in data collection, in interpretation, and in enforcement. Actually, it seems to be default on all sides to do something like that. Any moderate listening closely to those that disagree looking for evidence of their points is an outlier. Something wrong with that at a fundamental level.

                                                                                                                                      So, I then brought in my anecdotes to illustrate it given I never see them in opponents’ data or models. They might be wrong with their anecdotes right. I just think their model should include the dissent in their arguments along with reasons it does or doesn’t matter. The existence of dissent by non-haters in minority categories should be a real thing that’s considered.

                                                                                                                                    2. 3

                                                                                                                                      I think that the information asymmetry that you had with your anecdotes affected some of the reactions you got. For one, if someone considers your actions negative in some way, they are conditioned by society to assume that you were being prejudiced. If your workplace was one that had more of a negative connotation (perhaps a debt collection service or what have you) that goes double. That’s a reason for the percieved negativity that your white male colleagues didn’t even have to consider, and they concluded that you were just being moderately nice. Notice that you didn’t have to be specifically discriminatory, nor was it necessarily fair. It’s just one more negative thing that happens because prejudice does exist. I would imagine that you would not have so many negative reactions if you explained exactly what you were doing vis-a-vis the randomization of greetings and such. I think I would discount percieved discrimination if someone did that to me.

                                                                                                                                  2. 14

                                                                                                                                    Yes, it’s a ludicrous hissy fit. Especially considering that LLVM began at UIUC which, like many (most? all?) universities, has scholarships which are only awarded to members of underrepresented groups–so he’d have never joined the project in the first place if this were truly a principled stand and not just an excuse to whine about “the social injustice movement.” (I bet this guy thinks it’s really clever to spell Microsoft with a $, too.)

                                                                                                                                    1. 6

                                                                                                                                      That jab “Microsoft with a $” was really uncalled for. You have no evidnece of this. Please stop.

                                                                                                                                      1. 6

                                                                                                                                        The point is a bit bluntly made, but it’s for a reason. There’s a certain kind of internet posting style which uses techniques like changing “social justice movement” to “social injustice movement” to frame the author’s point of view. Once upon a time “Micro$oft” was common in this posting style.

                                                                                                                                        For extreme cases of this, see RMS’ writing (Kindle=Swindle, etc).

                                                                                                                                        (The problem with these techniques, IMO, is that they’re never as clever and convincing as the person writing them thinks that they are. Maybe they appeal to some people who already agree with that point of view, but they can turn off anyone else…)

                                                                                                                                        1. 2

                                                                                                                                          I think there is a difference here. “Microsoft” is not framing any point of view. “social justice movement”, on the other hand, is already framing certain point of view. I think “social injustice movement” is an acceptable alternative to “so-called social justice movement”, because prefixing “so-called” every time is inconvenient.

                                                                                                                                    2. 0

                                                                                                                                      Without more info it seems persecution complex.

                                                                                                                                    1. 11

                                                                                                                                      “Domain fronting” wouldn’t exist as a misfeature if SNI was encrypted.

                                                                                                                                      If SNI was encrypted, Google or Amazon would probably still be unhappy about Signal’s use of their IP addresses. But, the conversation would be “Google / Amazon kicks Signal off the cloud” as opposed to “Signal fraudulently uses Google / Amazon’s domain name to combat censorship.”

                                                                                                                                      Food for thought wrt. the continued existence of unencrypted SNI, even post-TLS 1.3.

                                                                                                                                      1. 4

                                                                                                                                        How could SNI be encrypted? SNI determines which certificate should be used to encrypt and decrypt traffic. Maybe I’m missing something, but it looks like an egg and chicken problem.

                                                                                                                                        Update: Here is some slides about “encrypted SNI”. It makes sense only if the DNS query is encrypted too, and if the server IP cannot be used to indirectly identify the HTTP host.

                                                                                                                                        1. 9

                                                                                                                                          The SNI Encryption in TLS RFC draft summarizes the issue far better than I can.

                                                                                                                                          Update: “make sense only if…” is letting perfect be the enemy of good. Work is being done to encrypt SNI. Work is being done to encrypt DNS. Like peanut butter and jelly, both are good in and of themselves. And they’re even better together!

                                                                                                                                      1. 6

                                                                                                                                        Can anyone speak to who this sort of things is targeted at? The way I see it:

                                                                                                                                        • If uptime is really important, you’re going to need your app running across multiple machines anyways, in which case doing zero downtime deployments is a pretty standard pattern of shifting traffic to one machine, upgrading the other, and then letting traffic come back.
                                                                                                                                        • If uptime is not so important to your application, then 10 to 20 seconds of downtime doesn’t seem like a big loss. You could say “hey it’s just a better experience” which is roughly what the article says but I struggle squaring that with the running on one machine thing.
                                                                                                                                        1. 3

                                                                                                                                          I agree, but the technique described in the article is similar in a multiple machines setup. Instead of having 2 machines, they have 2 processes (the old one and the new one) running on the same machine, with nginx acting as a load balancer.

                                                                                                                                        1. 1

                                                                                                                                          Interesting. The links to the Gists don’t work.

                                                                                                                                          1. 2

                                                                                                                                            I’m always impressed by what PostgreSQL + Citus can do together.

                                                                                                                                            1. 9

                                                                                                                                              I’m not sure if “Gmail alternative” is implying anything other than “service to send and receive email”. If that’s all, I’ve been using https://www.mailgun.com/ to send emails to myself whenever someone uses a small app I wrote to get into my building using their api. And I’ve had zero problems. They give 10k emails sent/received a month.

                                                                                                                                              1. 3

                                                                                                                                                I’ve used mailgun on a bunch of WordPress installs, and have yet to be disappointed.

                                                                                                                                                https://sendgrid.com/ is pretty nice, too.

                                                                                                                                                1. 1

                                                                                                                                                  +1 for sendgrid.

                                                                                                                                                  I have used sendgrid and it was OK for my relatively low volume traffic.

                                                                                                                                                2. 2

                                                                                                                                                  I concur about Mailgun being a really great solution for professional and hobby projects as well, thanks to its generous free quota.

                                                                                                                                                  You can also look at Sendgrid, Mailjet, SparkPost, Postmark, Sendinblue and Amazon SES.

                                                                                                                                                1. 18

                                                                                                                                                  Slightly off topic: I see people complaining a lot about Electron, with Slack being a prime example.

                                                                                                                                                  I think the success of Visual Studio Code means that it is possible to build excellent apps using Electron. And that the performance of Slack app is not necessarily representative of all Electron based apps.

                                                                                                                                                  1. 26

                                                                                                                                                    I think it’s possible. But VSC is literally the only Electron app that doesn’t blatantly suck performance-wise. Is that because Microsoft just actually put in the effort to make something good? Or is it because Microsoft has built best-in-class IDEs that scale radically better than any alternative for a long long long time?

                                                                                                                                                    Now no one get me wrong, I’m a UNIX guy through and through, but anyone who claims there’s anything better than Visual Studio for large scale C++ development has no clue what they’re talking about. C++ as a language is complete bullshit, the most hostile language you can write an IDE for. Building an IDE for any other language is child’s play in comparison, and Microsoft is proving it with VSC.

                                                                                                                                                    I don’t think it’s currently possible for anyone besides Microsoft to make an excellent Electron app. They took a bunch of internal skill for building huge GUI applications that scale, and built their own language to translate that skill to a cross platform environment. I think they could have chosen whatever platform they felt like, and only chose to target Javascript because the web / cloud is good for business. We’ll start seeing good Electron apps when Typescript and the Microsoft way become the de facto standard for building Electron apps.

                                                                                                                                                    But I also haven’t slept in 24 hours so maybe I’m crazy. I reckon I’ll go to bed now.

                                                                                                                                                    1. 7

                                                                                                                                                      but anyone who claims there’s anything better than Visual Studio for large scale C++ development has no clue what they’re talking about.

                                                                                                                                                      JetBrains CLion might actually be a bit better – but they started building addons to improve development in VisualStudio (e.g. the amazing ReSharper) originally, and only expanded to build their own IDE later on.

                                                                                                                                                      I fully agree on all other points.

                                                                                                                                                      1. 5

                                                                                                                                                        CLion definitely has a great feature set, but I’ve found a lot of it to be unusably slow, at least on our large codebase. Lots of us use Qt Creator even though it’s objectively worse and has some sketchy bugs, because it’s at least fast for the stuff it does do. I look forward to the day I can comfortably switch to CLion.

                                                                                                                                                        1. 3

                                                                                                                                                          CLion is fantastic, I came to it after a lot of use of PyCharm.

                                                                                                                                                      2. [Comment removed by author]

                                                                                                                                                        1. 5

                                                                                                                                                          I don’t think I can agree on the hype thingy here.

                                                                                                                                                          Background: I hate developing on Windows, been using Linux for god knows how many years, but I do have a Windows work(play)station at home where I sometimes do development and I don’t always want to ssh into some box to develop (or in the case of creating Windows applications, I can’t)

                                                                                                                                                          I’ve been using eclipse for years (for the right combination of languges and available plugins, of course) and had been searching for a decent “general-purpose” replacements (e.g. supports a lot of languages in a decent way, is configurable enough so you can work, has more features than, say, an editor with only syntax highlighting). So ok, I never used Sublime Text (tried it out, didn’t like it for some reason) and VS Code was the first thing since like 10 years where it was just a joy having a nice, functioning and free IDE/text editor that didn’t look like it was written i the 90s (like, can’t configure the font, horrible Office 94-like MDI), doesn’t take 2mins to load (like eclipse with certain plugins) etc.pp

                                                                                                                                                          It’s about frictionless onboarding, and yes, maybe I sound really nitpicky here - but it’s from the standpoint as a totally hobbyist programmer, as my overlap with any work projects or any serious open source work (where I usually have the tooling set up like at work, as it’s long-ongoing and worth the investmnt). That’s also the focus on free. Absolutely willing to pay for a good IDE (e.g. IntelliJ IDEA) but not if I’m firing it up once per month.

                                                                                                                                                        2. 3

                                                                                                                                                          Is there a chance that the ill reputation of Electron apps is that Electron itself offers ample opportunity for prime footgunmanship?

                                                                                                                                                          I’d argue that yes, it’s quite possible to build a nice simple (moderately) lightweight thing in Electron; it’s just pretty hard in comparison to building, say, a nice simple (definitely) lightweight CLI. Or even a desktop app using a regular graphical toolkit?

                                                                                                                                                          1. 10

                                                                                                                                                            Visual Studio Code, Slack, Discord, WhatsApp, Spotify all are unfortunately not simple. And while they could be reduced to simpler apps, I kinda feel like we’re all using them exactly because they have all these advanced features. These features are not useless, and a simpler app would disappoint.

                                                                                                                                                            It also seems like GUI and CLI toolkits are lagging behind the Web by maybe a decade, no joke. I’d love to see a native framework that implements the React+Redux flow. Doesn’t even have to be portable or JavaScript.

                                                                                                                                                            1. 4

                                                                                                                                                              I’m a huge fan of CLI software that eats text and outputs text. It’s easier to integrate into my flow, and the plethora of tools that are already available to manipulate the inputs and outputs.

                                                                                                                                                              An example: I’ve written a CLI client to JIRA that I have plugged into the Acme editor. I just tweaked my output templates a bit to include commands that I’d want to run related to a given ticket as part of my regular output, and added a very simple plumber rule that fetches a ticket’s information if I right-click anything that looks like a JIRA ticket (TASK-1234, for example). It’s served me well as a means to not have to deal with the JIRA UI, which I find bloated and unintuitive, and it allows me to remain in the context of my work to deal with the annoyance of updating a ticket (or fetching info regarding a ticket (or listing tickets, or pretty much anything really)). It’s far from perfect, but it covers most, if not all, of my day-to-day interaction with JIRA, and it’s all just an integration of different programs that know how to deal with text.

                                                                                                                                                              [edit: It’s far from perfect, but I find it better than the alternative]

                                                                                                                                                              1. 1

                                                                                                                                                                Is either part of that open-source by chance? I’ve been trying acme as my editor and use JIRA at work. I have a hunch you’re largely describing four lines of plumb rules and a short shell script, but I’m still having trouble wrapping my head around the right way to do these things.

                                                                                                                                                                1. 3

                                                                                                                                                                  Full disclosure, the JIRA thing has bugs that have not stopped me from using it in any meaningful way. https://github.com/otremblay/jkl

                                                                                                                                                                  The acme plumbing rule is as follows:

                                                                                                                                                                  type	is	text
                                                                                                                                                                  data	matches	'([A-Za-z]+)-([0-9]+)'    
                                                                                                                                                                  plumb	start	rc -c 'jkl '$1'-'$2' >[2=1] | nobs | plumb -i -d edit -a ''action=showdata filename=/jkl/'$1'-'$2''''
                                                                                                                                                                  

                                                                                                                                                                  It checks for a file called “.jklrc” in $HOME. Its shape is as follows:

                                                                                                                                                                  JIRA_ROOT=https://your.jira.server/   
                                                                                                                                                                  JIRA_USER=yourusername
                                                                                                                                                                  JIRA_PASSWORD=yourpassword
                                                                                                                                                                  JIRA_PROJECT=PROJECTKEY
                                                                                                                                                                  #JKLNOCOLOR=true
                                                                                                                                                                  RED_ISSUE_STATUSES=Open
                                                                                                                                                                  BLUE_ISSUE_STATUSES=Ready for QA,In QA,Ready for Deploy
                                                                                                                                                                  YELLOW_ISSUE_STATUSES=default
                                                                                                                                                                  GREEN_ISSUE_STATUSES=Done,Closed
                                                                                                                                                                  # The following is the template for a given issue. You don't need this, but mine contains commands that jkl can run using middleclick.
                                                                                                                                                                  JKL_ISSUE_TMPL="{{$key := .Key}}{{$key}}	{{if .Fields.IssueType}}[{{.Fields.IssueType.Name}}]{{end}}	{{.Fields.Summary}}\n\nURL: {{.URL}}\n\n{{if .Fields.Status}}Status:	 {{.Fields.Status.Name}}\n{{end}}Transitions: {{range .Transitions}}\n	{{.Name}}	| jkl {{$key}} '{{.Name}}'{{end}}\n\n{{if .Fields.Assignee}}Assignee:	{{.Fields.Assignee.Name}}\n{{end}}jkl assign {{$key}} otremblay\n\nTime Remaining/Original Estimate:	{{.Fields.PrettyRemaining}} / {{.Fields.PrettyOriginalEstimate}}\n\n{{.PrintExtraFields}}\n\nDescription:   {{.Fields.Description}} \n\nIssue Links: \n{{range .Fields.IssueLinks}}	{{.}}\n{{end}}\n\nComments: jkl comment {{$key}}\n\n{{if .Fields.Comment }}{{$k := $key}}{{range .Fields.Comment.Comments}}{{.Author.DisplayName}} [~{{.Author.Name}}] (jkl edit {{$k}}~{{.Id}}):\n-----------------\n{{.Body}}\n-----------------\n\n{{end}}{{end}}"
                                                                                                                                                                  
                                                                                                                                                                  1. 1

                                                                                                                                                                    Thank you so much! I’ll take a look shortly. It really helps to see real-world examples like this.

                                                                                                                                                                    1. 2

                                                                                                                                                                      If “jkl” blows up in your face, I totally accept PRs. If you decide to go down that path, I’m sorry about the state of the code. :P

                                                                                                                                                              2. 1

                                                                                                                                                                It also seems like GUI and CLI toolkits are lagging behind the Web by maybe a decade, no joke. I’d love to see a native framework that implements the React+Redux flow. Doesn’t even have to be portable or JavaScript.

                                                                                                                                                                I couldn’t disagree more. Sure, maybe in “developer ergonomics” Web is ahead, but GUI trounces Web in terms of performance and consistency.

                                                                                                                                                                1. 1

                                                                                                                                                                  I’d love to see a native framework that implements the React+Redux flow.

                                                                                                                                                                  Maybe Flutter?

                                                                                                                                                                  1. 1

                                                                                                                                                                    Flutter is such a native framework, although only for mobile (i.e. Android & iOS).

                                                                                                                                                                  2. 2

                                                                                                                                                                    I belive one of the things that gave Electron apps a bad reputation (aside from the obvious technological issuses) were things like “new” web browsers, built with electron, offering nothing practically new, that most people would actually want, such as lower memory consumption, for example.

                                                                                                                                                                    1. 2

                                                                                                                                                                      Building UIs is hard in general - it seems like electron trades off ease of making UIs performant for ease of building them.

                                                                                                                                                                      That being said, it seems like it’s not prohibitively difficult to build a fast UI in electron: https://keminglabs.com/blog/building-a-fast-electron-app-with-rust/

                                                                                                                                                                      It seems like most people building electron apps just don’t think about performance until much later in the process of development.

                                                                                                                                                                    2. 2

                                                                                                                                                                      I think one of the few main selling points of Electron was accessibility. Anybody with solid knowledge of HTML, CSS and JS could find his way around and build the app that was running on multiple platforms. But it wasn’t performant and it was quite resource hog as it turned out. Now why is this not the case with Visual Studio Code? Because it is being written by really good developers, who are working for Microsoft, who worked on creating Typescript, in which is Visual Studio Code written, on top of Electron. Now you can get the sense of things why Visual Studio Code is different case than rest of the Electron apps, people behind it are the reason. And whole story defeats the point of Electron. If Electron as a platform could produce half as good results as VSC in terms of performance and resource efficiency than maybe it would be more viable option, as it is right now, I can see the pendulum swinging back to some other native way of implementing applications.

                                                                                                                                                                      1. 2

                                                                                                                                                                        I mean, I hate the web stack like few others, but I think the point that ultimately the people are more determinative than the technology stands.

                                                                                                                                                                        I just really hate the web.

                                                                                                                                                                      2. 1

                                                                                                                                                                        I completely agree. I think that a lot of the frustrations with the quality of Electron apps is misplaced.

                                                                                                                                                                      1. 1

                                                                                                                                                                        You don’t need to use a separate JS file. You could use some kind of server template library to output your “JSON” data into a script tag.

                                                                                                                                                                        <script type="text/javascript">

                                                                                                                                                                        var dataFromServer = $dataFromServer;

                                                                                                                                                                        </script>

                                                                                                                                                                        So for example, $dataFromServer might be a variable in your templating language that would contain your data as a JSON-formatted string.

                                                                                                                                                                        Or you could use the templating language to loop through your data and write out rows one by one, or whatever.

                                                                                                                                                                        1. 1

                                                                                                                                                                          This is exactly what I’m doing. I’m just wondering why most widgets I’ve seen in the wild don’t do this. The only one I could find that doesn’t return a purely static JS script, and where the server injects some dynamic data in the script before sending it to the browser is the Disqus comments widget.

                                                                                                                                                                        1. 1

                                                                                                                                                                          you could use http/2, so roundtrips are not the big issue anymore (or just for really old clients)

                                                                                                                                                                          1. 1

                                                                                                                                                                            HTTP/2 reduces the round-trip time because the same connection is used for both requests, but there is still the issue of doubling the network transmission time, which is not compressible for physical reasons, except if I use HTTP/2 Push to preventively “push” the JSON data to the client.

                                                                                                                                                                          1. 2

                                                                                                                                                                            Why not embed the JSON in a data attribute for the containing div, same as you do for the ID? Or even just in a script tag that gets evaluated before the other tag?

                                                                                                                                                                            1. 2

                                                                                                                                                                              I usually do exactly that in apps that I work on:

                                                                                                                                                                              <script id="bootstrap"
                                                                                                                                                                                      data-version="1507142129"
                                                                                                                                                                                      data-user='{&quot;username&quot;: &quot;&quot;, &quot;id&quot;: null, &quot;organizations&quot;: []}'></script>
                                                                                                                                                                              

                                                                                                                                                                              Then I can grap the script element by id and read the data attributes.

                                                                                                                                                                              1. 1

                                                                                                                                                                                I can’t because the widget is embedded on my customer’s website. I control the widget, but I don’t control my customer website. The data used by the widget are provided by my servers, not by my customer’s website. (I edited the initial post for clarity.)

                                                                                                                                                                              1. 8

                                                                                                                                                                                Go is the most opinionated language I know and it can be fun if you adhere to them, otherwise things can get a bit hairy (e.g. developing outside the GOPATH). Following the language’s idioms is something you’ve to deal with when developing Go applications.

                                                                                                                                                                                1. 4

                                                                                                                                                                                  Developing outside GOPATH is currently worked on: https://research.swtch.com/vgo-intro

                                                                                                                                                                                  1. 2

                                                                                                                                                                                    This is really nice to hear, currently I use a project-template with some Makefile and shell magic to simulate a custom GOPATH.

                                                                                                                                                                                    1. 1

                                                                                                                                                                                      Great template! Thanks for sharing. Though, I hope vgo eventually becomes the official go tool and makes this unnecessary :-)

                                                                                                                                                                                1. 12

                                                                                                                                                                                  The Go project is absolutely fascinating to me.

                                                                                                                                                                                  How they managed to not solve many hard problems of a language, it’s tooling or production workflow, but also solve a set to get a huge amount of developer mindshare is something I think we should get historians to look into.

                                                                                                                                                                                  I used Go professionally for ~2+ years, and so much of it was frustrating to me, but large swaths of our team found it largely pleasant.

                                                                                                                                                                                  1. 12

                                                                                                                                                                                    I’d guess there is a factor depending on what you want from a language. Sure, it doesn’t have generics and it’s versioning system leaves a lot to be wished for. But personally, if I have to write anything with networking and concurrency, usualy my first choice is Go, because of it’s very nice standard library and a certain sense of being thought-thorugh when it comes to concurrency/parallelism - at least so it appears to be when comparing it to other imperative Java, C or Python. Another popular point is how the language, as compared to C-ish languages doesn’t give you too much freedom when it comes to formatting – there isn’t a constant drive to use as few characters as possible (something I’m very prone to doing), or any debates like tabs vs. spaces, where to place the opening braces, etc. There’s really something reliving about this to me, that makes the language, as you put it, “pleasant” to use (even if you might not agree with it)

                                                                                                                                                                                    And regarding the standard library, one thing I always find interesting is how far you can get by just using what’s already packaged in Go itself. Now I haven’t really worked on anything with more that 1500+ LOC (which really isn’t much for Go), and most of the external packages I used were for the sake of convince. Maybe this totally changes when you work in big teams or on big projects, but it is something I could understand people liking. Especially considered that the Go team has this Go 1.x compatibility promise, so that you don’t have to worry that much about versioning when it comes to the standard lib packages.

                                                                                                                                                                                    I guess the worst mistake one can make is wanting to treat it like Haskell or Python, forcing a different padigram onto it. Just like one might miss macros when one changes from C to Java, or currying when one switches from Haskell to Python, but learns to accept these things, and think differently, so I belive, one should approach Go, using it’s strengths, which it has, instead of lamenting it’s weaknesses (which undoubtedly exist too).

                                                                                                                                                                                    1. 7

                                                                                                                                                                                      I think their driving philosophy is that if you’re uncertain of something, always make the simpler choice. You sometimes go to wrong paths following this, but I’d say that in general this is a winning strategy. Complexity can always be bolted on later, but removing it is much more difficult.

                                                                                                                                                                                      The whole IT industry would be a happier place if it followed this, but seems to me that we usually do the exact opposite.

                                                                                                                                                                                      1. 1

                                                                                                                                                                                        I think their driving philosophy is that if you’re uncertain of something, always make the simpler choice.

                                                                                                                                                                                        Nah - versioning & dependency management is not some new thing they couldn’t possibly understand until they waited 8 years. Same with generics.

                                                                                                                                                                                        Where generics I can understand a complexity argument for sure, versioning and dependency management are complexities everyone needed to deal with either way.

                                                                                                                                                                                        1. 3

                                                                                                                                                                                          If you understand the complexity argument for generics, then I think you could accept it for dependency management too. For example, Python, Ruby and JavaScript have a chaotic history in terms of the solution they adopted for dependency management, and even nowadays, the ecosystem it not fully stabilized. For example, in the JavaScript community, Facebook released yarn in October 2016, because the existing tooling was not adequate, and more and more developers are adopting it since then. I would not say that dependency management is a fully solved problem.

                                                                                                                                                                                          1. 1

                                                                                                                                                                                            I would not say that dependency management is a fully solved problem.

                                                                                                                                                                                            Yes it is, the answer is pinning all dependencies, including transitive dependencies. All this other stuff is just heuristics that end up failing later on and people end up pinning anyways.

                                                                                                                                                                                            1. 1

                                                                                                                                                                                              I agree about pinning. By the way, this is what vgo does. But what about the resolution algorithm used to add/upgrade/downgrade dependencies? Pinning doesn’t help with this. This is what makes Minimal Version Selection, the strategy adopted by vgo, original and interesting.

                                                                                                                                                                                              1. 1

                                                                                                                                                                                                I’m not sure I understand what the selection algorithm is doing then. From my experience: you change the pin, run your tests, if it passes, you’re good, if not, you fix code or decide not to change the version. What is MVS doing for this process?

                                                                                                                                                                                                1. 1

                                                                                                                                                                                                  When you upgrade a dependency that has transitive dependencies, then changing the pin of the upgraded dependency is not enough. Quite often, you also have to update the pin of the transitive dependencies, which can have an impact on the whole program. When your project is large, it can be difficult to do manually. The Minimal Version Selection algorithm offers a new solution to this problem. The algorithm selects the oldest allowed version, which eliminates the redundancy of having two different files (manifest and lock) that both specify which modules versions to use.

                                                                                                                                                                                                  1. 1

                                                                                                                                                                                                    Unless it wasn’t clear in my original comment, when I say pin dependencies I am referring to pinning all dependencies, including transitive dependencies. So is MVS applied during build or is it a curation tool to help discover the correct pin?

                                                                                                                                                                                                    1. 1

                                                                                                                                                                                                      I’m not sure I understand your question. MVS is an algorithm that selects a version for each dependency in a project, according to a given set of constraints. The vgo tool runs the MVS algorithm before a build, when a dependency has been added/upgraded/downgraded/removed. If you have the time, I suggest you read Russ Cox article because it’s difficult to summarize in a comment ;-)

                                                                                                                                                                                                      1. 1

                                                                                                                                                                                                        I am saying that with pinned dependencies, no algorithm is needed during build time, as there is nothing to compute for every dependency version is known apriori.

                                                                                                                                                                                                        1. 1

                                                                                                                                                                                                          I agree with this.

                                                                                                                                                                                      2. 4

                                                                                                                                                                                        I had a similar experience with Elm. In my case, it seemed like some people weren’t in the habit of questioning the language or thinking critically about their experience. For example, debugging in Elm is very limited. Some people I worked with came to like the language less for this reason. Others simply discounted their need for better debugging. I guess this made the reality easier to accept. It seemed easiest for people whose identities were tied to the language, who identified as elm programmers or elm community members. Denying personal needs was an act of loyalty.

                                                                                                                                                                                        1. 2

                                                                                                                                                                                          How they managed to not solve many hard problems of a language, it’s tooling or production workflow, but also solve a set to get a huge amount of developer mindshare is something I think we should get historians to look into.

                                                                                                                                                                                          I think you’ll find they already have!

                                                                                                                                                                                        1. 46

                                                                                                                                                                                          Half this article is out of date as of 2 days ago. GOPATH is mostly going to die with vgo as is the complaint about deps.

                                                                                                                                                                                          Go is kind of an example of what happens when you focus all effort on engineering and not research.

                                                                                                                                                                                          Good things go has:

                                                                                                                                                                                          • Go has imo the best std library of any language.
                                                                                                                                                                                          • Go has the best backwards compatibility I have seen (I’m pretty sure code from go version 1.0 still works today.).
                                                                                                                                                                                          • Go has the nicest code manipulation tools I have seen.
                                                                                                                                                                                          • The best race condition detector tool around.
                                                                                                                                                                                          • An incredibly useful in practice interface system. (I once used the stdlibrary http server over a serial port because net.Listener is a simple interface)
                                                                                                                                                                                          • The fastest compiler to use, and to build from source.
                                                                                                                                                                                          • Probably the best cross compilation story of any language, and uniformity across platforms, including ones you haven’t heard of.
                                                                                                                                                                                          • One of the easiest to distribute binaries across platforms (this is why hashicorp, cockroachdb, ngrok etc choose go imo).
                                                                                                                                                                                          • A very sophisticated garbage collector with low pause times.
                                                                                                                                                                                          • One of the best runtime performance to ease of use ratios around.
                                                                                                                                                                                          • One of the easier to learn languages around.
                                                                                                                                                                                          • A compiler that produces byte for byte identical binaries.
                                                                                                                                                                                          • incredibly useful libraries maintained by google: (e.g. Heres a complete ssh client and server anyone can use: https://godoc.org/golang.org/x/crypto/ssh)
                                                                                                                                                                                          • Lots of money invested in keeping it working well from many companies: cloud flare, google, uber, hashicorp and more.

                                                                                                                                                                                          Go is getting something that looks like a damn good versioning story, just way too late:

                                                                                                                                                                                          Go should have in my opinion and order of importance:

                                                                                                                                                                                          • Ways to express immutability as a concurrent language.
                                                                                                                                                                                          • More advanced static analysis tools that can prove properties of your code (perhaps linked with the above).
                                                                                                                                                                                          • Generics.
                                                                                                                                                                                          • Some sort of slightly more sophisticated pattern matching .

                                                                                                                                                                                          Go maybe should have:

                                                                                                                                                                                          • More concise error handling?
                                                                                                                                                                                          1. 53

                                                                                                                                                                                            I have been involved with Go since the day of its first release, so almost a decade now, and it has been my primary language for almost as long. I have written the Solaris port, the ARM64 port, and the SPARC64 port (currently out of tree). I have also written much Go software for myself and for others.

                                                                                                                                                                                            Go is my favorite language, despite everything I write below this line.

                                                                                                                                                                                            Everything you say is true, so I will just add more to your list.

                                                                                                                                                                                            My main problem with Go is that, as an operating system it’s too primitive, it’s incomplete. Yes, Go is an operating system, almost. Almost, but not quite. Half and operating system. As an operating system it lacks things like memory isolation, process identifiers, and some kind of a distributed existence. Introspection exists somewhat, but it’s very weak. Let me explain.

                                                                                                                                                                                            Go presents the programmer with abstractions traditionally presented by operating systems. Take concurrency, for example. Go gives you goroutines, but takes away threads, and takes away half of processes (you can fork+exec, but not fork). Go gives you the net package instead of the socket interface (the latter is not taked away, but it’s really not supposed to be used by the average program). Go gives you net/http, instead of leaving you searching for nginx, or whatever. Life is good when you use pure Go packages and bad when you use cgo.

                                                                                                                                                                                            The idea is that Go not only has these rich features, but that when you are programming in Go, you don’t have to care about all the OS-level stuff underneath. Go is providing (almost) all abstractions. Go programming is (almost) the same on Windows, OpenBSD and Plan 9. That is why Go programs are generally portable.

                                                                                                                                                                                            I love this. As a Plan 9 person, you might imagine my constant annoyance with Unix. Go isolates me from that, mostly, and it is great, it’s fantastic.

                                                                                                                                                                                            But it doesn’t go deep enough.

                                                                                                                                                                                            A single Go program instance is one operating system running some number of processes (goroutines), but two Go program instances are two operating systems, instead of one distributed operating system, and in my mind that is one too many operating systems.

                                                                                                                                                                                            “Deploying” a goroutine is one go statement away, but deploying a Go program still requires init scripts, systemds, sshs, puppets, clouds, etc. Deploying a Go program is almost the same as deploying C, or PHP, or whatever. It’s out of scope for the Go operating system. Of course that’s a totally sensible option, it’s just doesn’t align with what I need.

                                                                                                                                                                                            My understanding about Erlang (which I know little of, so forgive me if I misrepresent it) is that once you have an Erlang node running, starting a remote Erlang process is almost as easy as starting a local Erlang process. I like that. I don’t have to fuck with kubernetes, ansible, it’s just a single, uniform, virtual operating system.

                                                                                                                                                                                            Goroutines inside a single process have very rich communication methods, Go channels, even mutexes if you desire them. But goroutines in different processes are handicaped. You have to think about how to marshal data and RPC protocols. The difficulty of getting two goroutines in different processes to talk to each other is the about the same as getting some C, or Python code, to talk to Go. Since I only want Go to talk to Go, I don’t think that’s right. It should be easier, and it should feel native. Again, I think Erlang does better here.

                                                                                                                                                                                            Goroutines have no process ids. This makes total sense if you restrict yourself to a single-process universe, but since I want a multi-process universe, and I want to avoid thinking about systemds and dockers, I want to supervise goroutines from Go. Which means goroutines should have process ids, and I should be able to kill and prioritize them. Erlang does this, of course.

                                                                                                                                                                                            What I just described in the last two paragraph would preclude shared memory. I’m willing to live with that in order to get network transparency.

                                                                                                                                                                                            Go programs have ways to debug and profile themselves. Stack traces are one function call away, and there’s a easy to use profiler. But this is not enough. Sometimes you need a debugger. Debugging Go programs is an exercise in frustration. It’s much difficult than debugging C programs.

                                                                                                                                                                                            I am probably one of the very few people on planet Earth that knows how to profile/debug Go programs with a grown-up tool like DTrace or perf. And that’s because I know assembly programming and the Go runtime very well. This is unacceptable. Some people would hope that something would happen to Go so that it works better with these tools, but frankly, I love the “I am an operating system” aspect of Go, so I would want to use something Go-native. But I want something good.

                                                                                                                                                                                            This post is getting too long, so I will stop now. Notice I didn’t feel a need for generics in these 9 years. I must also stress out that I am a low-level programmer. I like working in the kernel. I like C and imperating programming. I am not one of those guys that prefers high-level languages (that do not have shared memory), so naturally wants Go to be the same. On the contrary. I found out what I want only through a decade of Go experience. I have never used a language without shared memory before.

                                                                                                                                                                                            I think Go is the best language for writting command-line applications. Shared memory is very useful in that case, and the flat, invisble goroutines prevent language abuse and “just work”. Lack of debugger, etc, are not important for command-line applications, and command-line applications are run locally, so you don’t need dockers and chefs. But when it comes to distributed systems, I think we could do better.

                                                                                                                                                                                            In case it’s not clear, I wouldn’t want to change Go, I just want a different language for distributed systems.

                                                                                                                                                                                            1. 11

                                                                                                                                                                                              I’ve done some limited erlang programming and it is very much a distributed OS to the point where you are writing a system more than a program. You even start third party code as “applications” from the erlang shell before you can make calls to them. erlang’s fail fast error handling and let supervisors deal with problems is also really fun to use.

                                                                                                                                                                                              I haven’t used dtrace much either, but I have seen the power, something like that on running go systems would also be neat.

                                                                                                                                                                                              1. 5

                                                                                                                                                                                                Another thing that was interesting about erlang is how the standard library heavily revolves around timers and state machines because anything could fail at any point. For example gen_server:call() (the way to call another process implementing the generic service interface) by default has a 5 second timeout that will crash your process.

                                                                                                                                                                                              2. 2

                                                                                                                                                                                                Yes, Go is an operating system, almost. Almost, but not quite. Half and operating system. As an operating system it lacks things like memory isolation, process identifiers, and some kind of a distributed existence.

                                                                                                                                                                                                This flipped a bit in my head:

                                                                                                                                                                                                Go is CMS, the underlying operating system is VM. That is, Go is an API and a userspace, but doesn’t provide any security or way to access the outside world in and of itself. VM, the hypervisor, does that, and, historically, two different guests on the same hypervisor had to jump through some hoops to talk to each other. In IBM-land, there were virtual cardpunches and virtual cardreaders; these days, we have virtual Ethernet.

                                                                                                                                                                                                So we could, and perhaps should, have a language and corresponding ecosystem which takes that idea as far as we can, implementation up, and maybe it would look more like Erlang than Go; the point is, it would be focused on the problem of building distributed systems which compile to hypervisor guests with a virtual LAN. Ideally, we’d be able to abstract away the difference between “hypervisor guest” and “separate hardware” and “virtual LAN” and “real LAN” by making programs as insensitive as possible to timing variation.

                                                                                                                                                                                              3. 18

                                                                                                                                                                                                How can vgo - announced just two days ago - already be the zeitgeist answer for “all of go’s dependency issues are finally solved forever”?

                                                                                                                                                                                                govendor, dep, glide - there’s been many efforts and people still create their own bespoke tools to deal with GOPATH, relative imports being broken by forks, and other annoying problems. Go has dependency management problems.

                                                                                                                                                                                                1. 2

                                                                                                                                                                                                  We will see how it pans out.

                                                                                                                                                                                                2. 15

                                                                                                                                                                                                  Go has the best backwards compatibility I have seen (I’m pretty sure code from go version 1.0 still works today.).

                                                                                                                                                                                                  A half-decade of code compatibility hardly seems remarkable. I can still compile C code written in the ’80s.

                                                                                                                                                                                                  1. 11

                                                                                                                                                                                                    I have compiled Fortran code from the mid-1970s without changing a line.

                                                                                                                                                                                                    1. 1

                                                                                                                                                                                                      Can you compile Netscape Communicator from 1998 on a modern Linux system without major hurdles?

                                                                                                                                                                                                      1. 13

                                                                                                                                                                                                        You do understand that the major hurdles here are related to the external libraries and processes it interacts with, and that Go does not save you from such hurdles either (other than recommending that you vendor compatible version where possible), I hope.

                                                                                                                                                                                                      2. 1

                                                                                                                                                                                                        A valid point not counting cross platform portability and system facilities. Go has a good track record and trajectory but you may be right.

                                                                                                                                                                                                      3. 5

                                                                                                                                                                                                        Perfect list (the good things, and the missing things).

                                                                                                                                                                                                        1. 3

                                                                                                                                                                                                          The fixes the go team have finally made to GOROOT and GOPATH are great. I’m glad they finally saw the light.

                                                                                                                                                                                                          But PWD is not a “research concern” that they were putting off in favor of engineering. The go team actively digs their heals in on any choice or concept they don’t publish first, and it’s why in spite of simple engineering (checking PWD and install location first) they argued for years on mailing lists that environment variables (which rob pike supposedly hates, right?) are superior to simple heuristics.

                                                                                                                                                                                                          Your “good things go has” list is also very opinionated (code manipulation tools better that C# or Java? Distrribution of binaries.. do you just mean static binaries?? Backwards compatibility that requires recompilation???), but I definitely accept that’s your experience, and evidence I have to the contrary would be based on my experiences.

                                                                                                                                                                                                          1. 4

                                                                                                                                                                                                            The fixes the go team have finally made to GOROOT and GOPATH are great.

                                                                                                                                                                                                            You haven’t had to set, and should’t have set GOROOT since Go 1.0, released six years ago.

                                                                                                                                                                                                            (which rob pike supposedly hates, right?)

                                                                                                                                                                                                            Where did you get that idea?

                                                                                                                                                                                                            1. 5

                                                                                                                                                                                                              Yes, you do have to set GOROOT if you use a go command that is installed in a location different than what it was compiled for, which is dumb considering the go command could just find out where it exists and work from there. See: https://golang.org/doc/go1.9#goroot for the new changes that are sane.

                                                                                                                                                                                                              And I got that idea from.. rob pike. Plan9 invented a whole new form of mounts just to avoid having a PATH variable.

                                                                                                                                                                                                              1. 4

                                                                                                                                                                                                                you do did have to set GOROOT if you use a go command that is installed in a location different than what it was compiled for

                                                                                                                                                                                                                So don’t do that… But yes, that’s also not required anymore. Also, if you move /usr/include you will find out that gcc won’t find include files anymore… unless you set $CPPFLAGS. Go was hardly unique. Somehow people didn’t think about moving /usr/include, but they did think about moving the Go toolchain.

                                                                                                                                                                                                                Plan9 invented a whole new form of mounts just to avoid having a PATH variable.

                                                                                                                                                                                                                No, Plan 9 invented new form of mounts in order to implement a particular kind of distributed computing. One consequence of that is that $path is not needed in rc(1) anymore, though it is still there if you want to use it.

                                                                                                                                                                                                                In Plan 9 environment variables play a crucial role, for example $objtype selects the toolchain to use and $cputype selects which binaries to run.

                                                                                                                                                                                                                Claiming that Rob Pike doesn’t like environment variables is asinine.

                                                                                                                                                                                                                1. 20

                                                                                                                                                                                                                  “So don’t do that…” is the best summary of what I dislike about Go.

                                                                                                                                                                                                                  Ok, apologies for being asinine.

                                                                                                                                                                                                                2. 1

                                                                                                                                                                                                                  I always compiled my own go toolchain because it takes about 10 seconds on my PC, is two commands (cd src && ./make.bash). Then i could put it wherever I want. I have never used GOROOT in many years of using Go.

                                                                                                                                                                                                              2. 0

                                                                                                                                                                                                                C# and Java certainly have great tools, C++ has some ok tools. All in the context of bloated IDE’s that I dislike using (remind me again why compiling C++ code can crash my text editor?). But I will concede the point that perhaps C# refactoring tools are on par.

                                                                                                                                                                                                                I was never of the opinion GOPATH was objectively bad, it has some good properties and bad ones.

                                                                                                                                                                                                                Distrribution of binaries.. do you just mean static binaries? Backwards compatibility that requires recompilation???

                                                                                                                                                                                                                Dynamic libraries have only ever caused me problems. I use operating systems that I compile from source so don’t really see any benefit from them.