Threads for pzel

  1. 6

    For something not emulating a tty, http://man.9front.org/1/rio under section “Text windows”.

    1. 6

      tt[0] (2/3 of a tty) is a small, neat implementation of the ideas found in 9term.

      [0] https://github.com/leahneukirchen/tt

      1. 5

        Heh. Came here to say “try Plan 9 for a decades-old implementation of something better than TTY emulation” and found you had beaten me to it :)

        1. 2

          Yeah, that was my instinct, too. You can just simplify and get all that stuff for free, or complexify and attempt to recreate a lot of functionality on your own. For what it’s worth, emacs’ M-x shell with some tweaks can work very similarly to an acme win window. And you get all the cut/paste/edit/hover functionality you have in emacs.

      1. 7

        I could not follow why all this is bad. Does it make it impossible to install Linux on any computer with this chip?

        There were statements in the article that made it sound to me like the author considered it a problem that the chip made it harder to pirate copyrighted works i.e stealing content from creators, which didn’t sound right to me.

        1. 6

          According to an MS employee commenting on this (@david_chisnall), it’s a certification requirement from MS to support alternative root certs, which allows Linux distros to be installed and booted with a full secure boot chain.

          I found the article to be fairly unclear on why Pluton is bad, as well; the only “bad” thing is that it theoretically will make it easier to prevent software piracy and cheating in online games. Which doesn’t seem… bad, to me?

          1. 4

            Yup there were a number of red flags for me as well.

            I’ll believe that Linux really is impossible on these chips when we see systems in the wild in the hands of skilled hackers :)

            1. 4

              As I understand it, Linux on Pluton PCs will be about as available as, say, LineageOS on Android devices. If the vendor doesn’t allow unlocking the bootloader, you’re probably out of luck.

            2. 7

              “Pirating copyrighted works” is an unavoidable side effect of general-purpose computing. I’d rather not throw out general-purpose computing in order to appease Disney and Time-Warner.

              1. -2

                While it may sound easier on the conscience to think that this is a Robin Hood (The English myth, not the trading platform) kind of situation, at the foundation it isn’t. It’s indie authors getting their books stolen, it’s actors getting lower revenue because of lost viewership. It’s singers not getting royalties.

                If you are against big publishing/producing houses making money, support Indie artists. Making it easier to steal their works is not a solution.

                1. 12

                  It’s singers not getting royalties.

                  The biggest thieves of royalties are arguably the music industry.

                  Making it easier to steal their works is not a solution.

                  You can’t “steal” a work. You can create and distribute reproductions without permission or attribution and fail to pay royalties, but my possession of a song doesn’t exclude your access to it. The “theft” framework is a meme perpetuated almost entirely to the benefit of publishers and rights-holders (not artists!) in order to legitimize incredibly shitty and abusive behavior.

                  support Indie artists

                  I do, and I even pay for my tracks! But a lot of those artists I’m only aware of due to running across their music under circumstances where perhaps the licensing wasn’t as well audited as it could be.

                  1. 2

                    I have bought more indie music on Bandcamp in the last two years than I bought any music in the previous twenty. But a lot of that is because they offer DRM-free tracks in your choice of formats, generally at a very reasonable price. That’s not something you can say of, for example, the movie industry.

                    1. 2

                      I’ve known quite a few musicians and they had huge pirate music collections.

                    2. 6

                      I don’t see how locking down computers to such a level helps artists, especially independent ones, and as a consumer I hate buying DRMed content and avoid it where I can.

                1. 18

                  Agreed on everything but Copilot. The freedom to study how the software works is a fundamental attribute of free software. Learning is not covered by the GPL’s requirements. Copilot sometimes copypastes code (honestly - who doesn’t) but broadly it learns. This is entirely in keeping with open source.

                  If we’re gonna set a standard that you can’t use things you learnt in software under an open-source license when writing commercial software, we might as well shutter either the entire software industry or the entire open-source movement, because literally everybody does that. It’s how brains work!

                  And of course, it’s not like being off Github is gonna prevent MS from feeding your project into Copilot 2.

                  1. 65

                    Copilot does not learn.

                    Like all of these neural network “AIs”, it’s just a pattern recognition system that launders the work of many humans into a new form, which the corporation can profit from but the humans cannot. It’s piracy for entities rich enough to train and operate such an AI, and unethical enough to acquire the training data, but you or I would still be punished for pirating from the corporation. Whether or not it is legal is irrelevant to me (I’m in favor of abolishing copyright), but we must recognize the increasing power imbalance between individuals and corporations such “AI” represents.

                    Copilot understands nothing of what it writes. It learns nothing and knows nothing. It is not sentient or alive, no matter how tempting it is to anthropomorphize it.

                    1. 16

                      I think “pattern recognition system that launders the work of many humans into a new form” is just a rude way to phrase “learning.”

                      Define “understands.” Define “knows.” I think transformers derive tiered abstract patterns from input that they can generalize and apply to new situations. That’s what learning is to me.

                      1. 21

                        The standard philosophical definition of knowledge is a justified true belief. Copilot and other AIs make the belief part problematic, so bracket that. But they don’t justify things well at all. Justification is a social process of showing why something is true. The AIs sound like total bullshit artists when asked to justify anything. I don’t think Copilot “knows” things anymore than a dictionary does yet.

                        1. 2

                          Putting aside Gettier cases, that’s not what I understand “justified” to mean. You just need to have a reason for holding the knowledge. With AI, reinforcement learning is the justification.

                          The point of “justified belief” is just that it’s not knowledge if you just guess that it’s raining outside, even if it is in fact raining.

                          1. 9

                            The definition that @carlmjohnson is quoting is Plato’s and ever since Plato put it forth, knowledge theorists have been bickering about what “justified” means. The history of ideas after the age of Boethius or so isn’t quite my strong point so I’ll leave that part to someone else but FWIW most classical definitions of justification either don’t readily apply to reinforced learning, or if they do, it fails them quite badly.

                            That being said, if you want to go forth with that definition, it’s very hard to frame a statistical model’s output as belief in the first place, whether justified or not. Even for the simplest kinds of statistical models (classification problems with binary output – yes/no) it’s not at all clear to formulate what belief the model possesses. For example, it’s trivial to train a model to recognize if a given text is an Ancient Greek play or not. But when you feed it a piece of text, the question that the model is “pondering” isn’t “Is this an Ancient Greek play”, but “Should I say yes?”, just like any other classification model. If subjected to the right laws and statements, a model that predicts whether a statement would cause someone to be held in contempt of the court might also end up telling you if a given text is an Ancient Greek play with reasonable accuracy, too. “Is this an Ancient Greek play?” and “Is this statement in contempt of the court?” are not equivalent statements, but the model will happily appear to make both with considerable accuracy.

                            The model is making an inference about the content (“This content is of the kind I say yes to/the kind I say no to”), but because the two kinds cannot be associated to a distinct piece of information about the subject being fed to the model, I don’t think it can be said to constitute a belief. It’s not a statement that something is the case because it’s not clear what it asserts to be the case or not: there are infinitely many different classification problems that a model might turn out to solve satisfactorily.

                            1. 4

                              In Greek, “justified” was some variation on “logos”: an account. Obviously everyone and their Buridan’s ass has a pet theory of justification, but I think it’s fair to interpret Plato’s mooted definition (it’s rejected in the dialogue IIRC!) as being “the ability to give an account of why the belief is true”. This is the ability which Socrates finds that everyone lacks, and why he says he knows that he knows nothing.

                              1. 7

                                Ugh, it’s really tricky. This comes up in two dialogs: Theaetetus, where knowledge gets defined as “true judgement with an account” (which IIRC is the logos part) and it’s plainly rejected in the end. The other one is Meno, where it’s discussed in the terms of the difference between true belief and knowledge, but the matter is not definitively resolved.

                                I was definitely wrong to say it was Plato’s – I think I edited my comment which initially said “is effectively Plato’s” because I thought it was too wordy but I was 100% wrong to do it, as Plato doesn’t actually use this formulation anywhere (although his position, or rather a position that can be inferred from the dialogues, is frequently summarized in these terms). (Edit: FWIW this is a super frequent problem with modern people talking about ancient sources and one of the ways you can probably tell I’m an amateur :P)

                                I think it’s fair to interpret Plato’s mooted definition (it’s rejected in the dialogue IIRC!) as being “the ability to give an account of why the belief is true”.

                                You may know of this already but just in case your familiarity with modern philosophy is as spotty as mine, only it’s got holes in different places, and if you’re super curious patient, you’re going to find Gettier’s “Is Justified True Belief Knowledge?” truly fascinating. It’s a landmark paper that formalizes a whole lot of objections to this, some of them formulated as early as the 15th century or so.

                                The counter-examples Gettier comes up with are better from a formal standpoint but Russel famously formulated one that’s really straightforward.

                                Suppose I’m looking at a clock which shows it’s two o’clock, so I believe it’s two o’clock. It really is two o’clock – it appears that I possess a belief that is both justified (I just looked at the clock!) and true (it really is two o’clock). I can make a bunch of deductions that are going to be true, to: for example, if I were to think that thirty minutes from now it’s going to be half past two, I’d be right. But – thought I haven’t realized it – that clock has in fact stopped working since yesterday at two. (Bear with me, we’re talking about clocks from Russell’s age). My belief is justified, and it’s true, but only by accident: what I have is not knowledge, but sheer luck – I could’ve looked at the clock as half past two and held the same justified belief, but it would’ve been false, suggesting that an external factor may also be involved in whether a belief is true or not, justified or not, and, thus, knowledge or not, besides the inherent truth and justification of a statement.

                                1. 7

                                  The counter-examples Gettier comes up with are better from a formal standpoint but Russel famously formulated one that’s really straightforward.

                                  I love collecting “realistic” Gettier problems:

                                  • You’re asked a question and presented with a multiple choice answer. You can rule out 3 of the answers by metagaming (one is two orders of magnitude different from the others, etc)
                                  • I give you a 100 reasons why I believe X. You examine the first 30 of them and they’re all completely nonsensical. In fact, every argument but #41 is garbage. Argument #41 is irrefutable.
                                  • I believe “Poets commit suicide more often than the general population”, because several places say they commit suicide at 30x the rate. This claim turns out to be bunk, and a later investigation finds it’s more like 1.1x.
                                  • I encounter a bug and know, from all my past experience dealing with it, that it’s probably reason X. I have not actually looked at the code, or even know what language it’s programmed in, and it’s one notable for not having X-type bugs. The developers were doing something extremely weird that subverted that guarantee, though, and it is in fact X.
                                  • I find an empirical study convincingly showing X. The data turns out to have been completely faked. This is discovered by an unrelated team of experts who then publish an empirical study convincingly showing X’, which is an even stronger claim than X.
                                  1. 3

                                    My favourite ones come from debugging, that’s actually what got me into this in the first place (along with my Microwave Systems prof stubbornly insisting that you should know these things, even if engineers frown upon it, but that’s a whole other story):

                                    • While debugging an Ethernet adapter’s driver, I am pinging another machine and watching the RX packet count of an interface go up, so I believe packets are being received on that interface, and the number of packets received on my machine matches the number of packets that the other machine is sending to it. Packets are indeed being received on the interface. I made a stupid copy-paste error in the code: I’m reading from the TX count register and reporting that as the RX count. It only shows the correct value because sending a ping packet generates a single response packet, so the two counts happen to match.
                                    • An RTOS’ task overflows its stack (this was proprietary, it’s complicated) and bumps into another task’s stack, corrupting it. I infer the system crashes because of the stack corruption. Indeed, I can see task A bumping into task B’s stack, then A yields to B, and B eventually jumps at whatever garbage is on the stack, thus indeed crashing the system. There’s actually a bug in the process manager which causes the task table to become corrupted: A does overflow its task, but B’s stack is not located where A is overflowing. When A yields to B, the context is incorrectly restored, and B looks for its stack someplace else than it actually is, loading the stack pointer with an incorrect value. It just so happens that, because B is usually started before A, the bug is usually triggered by B yielding to A, but A just sits in a loop and toggles a couple of flags, so it’s never doing anything with the stack and never crashes, even though its stack does eventually get corrupted, too.

                                    I got a few other ones but it’s really late here and I’m not sure I’m quite coherent by now :-D.

                                  2. 2

                                    I’m familiar with Gettier cases. I never dove very deep into the literature. It always struck me that a justification is not just a verbal formulation but needs some causal connection to the fact of the matter: a working clock causes my reasoning to be correct but a stopped clock has no causal power etc. I’m sure someone has already worked out something like this and brought out the objections etc etc but it seems like a prima facie fix to me.

                                2. 1

                                  Yes, IMO the belief is “how may this text continue?” However, efficiently answering this question requires implicit background knowledge. In a similar sense, our brains may be said to only have information about “what perpetuates our existence” or “what makes us feel good.” At most we can be said to have knowledge of the electric potentials applied to our nerves, as Plato also made hay of. However, as with language models, a model of the unseen world arises as a side effect of the compression of sensory data.

                                  Actually, language models are fascinating to me because they’re a second-order learner. Their model is entirely based on hearsay; GPT-3 is a pure gossip. My hope for the singularity is that language models will be feasible to make safe because they’ll unavoidably pick up the human ontology by imitation.

                                  1. 5

                                    Yes, IMO the belief is “how may this text continue?”

                                    That’s a question, not a belief – I assume you meant “This text may continue ”. This has the same problem: that’s a belief that you are projecting onto the model, not necessarily one that the model formulates. Reasoning by analogy is an attractive shortcut but it’s an uneasy one – we got gravity wrong because of it for almost two thousand years. Lots of things “may be said” about our brains, but not all of them are true, and not all of them apply to language models.

                                    1. 1

                                      Sure, but by that metric everything that anyone has ever said is a belief that person is projecting. I think that language models match the pattern of having a belief, as I understand it.

                                      a belief that you are projecting onto the model, not necessarily one that the model formulates

                                      You’re mixing up meta-levels here: I believe that the model believes things. I’m not saying that we should believe that the model believes things because the model believes that; rather, (from my perspective) we should believe it because it’s true.

                                      In other words, if I model the learning process of a language model, the model in my head of the process fits the categories of “belief” and “learning”.

                                      1. 6

                                        I think that language models match the pattern of having a belief, as I understand it.

                                        Observing that a model follows the pattern of a behaviour is not the same as observing that behaviour though. For example, Jupiter’s motion matches the pattern of orbiting a fixed Earth on an epicycle, but both are in fact orbiting the Sun.

                                        FWIW, this is an even weaker assumption than I am making above – it’s not that no statements are made and that we only observe something akin to statements being made. I’m specifically arguing that the statements that the model appears to make (whether “it” makes them or not) are not particular enough to discriminate any information that the model holds about the world outside of itself and, thus, do not qualify as beliefs.

                                        1. 1

                                          If the world had a different state, the model would have different beliefs - because the dataset would contain different content.

                                          Also, Jupiter is in fact orbiting a fixed Earth on an epicycle. There is nothing that inherently makes that view less true than the orbiting-the-sun view. But I don’t see how that relates at all.

                                3. 3

                                  The problem is that reinforcement learning pushes the model toward reproducing the data distribution it was trained on. It’s completely orthogonal to truth about reality, in exactly the same way as guessing the state of the weather without evidence.

                                  1. 3

                                    The data is sampled from reality… I’m not sure what you think evidence is, that training data does not satisfy.

                                    It’s exactly the same as guessing the weather from a photo of the outside, after having been trained on photo/weather pairs.

                                    1. 9

                                      The data for language models in general is sampled from strings collected from websites, which includes true statements but also fiction, conspiracy theories, poetry, and just language in general. “Do you really think people would get on the Internet and tell lies” is one of the oldest jokes around for a reason.

                                      You can ask GPT-3 what the weather is outside, and it’ll give you an answer that is structured like a real answer would be, but has no relation to the actual weather outside your location or whatever data centers collectively host the darned thing. It _looks_like a valid answer, but there’s no reason to believe it is one, and it’s dangerous to infer that anything like training on photo/weather pairs is happening when nobody built that into the actual model at hand.

                                      Copilot in particular is no better - it’s more focused on code specifically, but the fact that someone wrote code does not mean that code is a correct or good solution. All Copilot can say is that it’s structured in a way that resembles other structures it’s seen before. That’s not knowledge of the underlying semantics. It’s useful and it’s an impressive technical achievement - but it’s not knowledge. Any knowledge involved is something the reader brings to the table, not the machine.

                                      1. 2

                                        Oh I’ll readily agree that Copilot probably doesn’t generate “correct code” rather than “typical code.” Though if it’s like GPT-3, you might be able to prompt it to write correct code. That might be another interesting avenue for study.

                                        “However, this code has a bug! If you look at line”…

                                        1. 2

                                          I’ve experimented with this a bit and found it quite pronounced - if you feed copilot code written in an awkward style (comments like “set x to 1”, badly named variables) you will get code that reflects that style.

                              2. 20

                                IMHO it’s perilous and not quite fair to think what a machine should be allowed to do and not to do by semantic convention. “Machine learning” was one uninspired grant writer away from going down into history as, say, “statistically-driven autonomous process inference and replication”, and we likely wouldn’t have had this discussion because anything that replicates code is radioactive for legal teams.

                                Copilot is basically Uber for copy-pasting from Stack Overflow. It’s in a legally gray area because the legal status of deriving works via statistical models is unclear, not because Microsoft managed to finally settle the question of what constitutes learning after all. And it’s probably on the more favourable side of gray shades because it’s a hot tech topic so it generates a lot of lobbying money for companies that can afford lawyers who can make sure it stays legally defensible until the next hot tech topic comes up.

                                Also, frankly, I think the question of whether what Copilot does constitutes learning or not is largely irrelevant, and that the question of whether Copilot-ing one’s code should be allowed is primarily rooted in entitlement. Github is Microsoft’s platform so, yes, obviously, they’re going to do whatever they can get away with on it, including things that may turn out to be illegal, or things that are illegal but will be deemed legal by a corrupt judge, or whatever. If someone wants $evil_megacorp to not do things with your code, why on Earth was their code anywhere near $evil_megacorp’s machines in the first place?

                                This cannot be a surprise to anyone who’s been in this field for more than a couple of years. Until a court rules otherwise, “fair” is whatever the people running a proprietary platform decide is fair. If anyone actually thought Github was about building a community and helping people do great things together or whatever their mission statement is these days, you guys, I have a bridge in Manhattan, I’m selling it super cheap, the view is amazing, it’s just what you need to take your mind off this Copilot kerfuffle, drop me a line if you wanna buy it.

                                (Much later edit: I know Microsoft is a hot topic in FOSS circles so just to be clear, lemme just say that I use Github and have zero problem with Copilot introducing the bugs that I wrote in other people’s programs :-D).

                                1. 1

                                  If machine learning was called “data replication”, it would be misnamed. And if it was called “pattern inference”, it would just be a synonym for learning… I wouldn’t care about Codex if I thought it was just a copypaste engine. I don’t think it is, though. Does it occasionally copypaste? Sure, but sometimes it doesn’t, and those are the interesting cases for me.

                                  I don’t think this at all comes down to Github being Microsoft’s platform so much as Github being the biggest repo in one place.

                                  I’m not at all defending Microsoft for the sake of Microsoft here, mind. I hate Microsoft and hope they die. I just think this attack does not hold water.

                                  1. 9

                                    If machine learning was called “data replication”, it would be misnamed.

                                    I beg to differ! Machine learning is a misnomer for statistically-driven autonomous process inference and replication, not the other way ’round!

                                    I’m obviously kidding but what I want to illustrate is that you shouldn’t apply classical meaning to an extrapolated term. A firewall is neither a wall nor is it made of fire, and fire protection norms doesn’t apply to it. Similarly, just because it’s called machine learning, doesn’t mean you should treat it as human learning and apply the same norms.

                                    1. 2

                                      I don’t think machine learning learns because it’s called machine learning, I think it learns because pattern extraction is what I think learning is.

                                      1. 7

                                        I realize that. I want to underline that, while machine learning may be superficially analogous to human learning, just like a firewall is superficially analogous to a wall made of fire, it does not mean that it should be treated the same as human learning in all regards.

                                        1. 2

                                          I don’t think it should be treated the same as human learning in all regards either. I think it’s similar to human learning in some ways and dissimilar in others, and the similarities are enough to call it “learning”.

                            2. 14

                              Do you think Microsoft would be okay with someone training an AI on the leaked Windows source code and using it to develop an operating system or a Windows emulator?

                              1. 5

                                You don’t even have the right to read that. That said, I think it should be legal.

                                1. 14

                                  I’m not asking whether it should be legal, but whether Microsoft would be happy about it. If not, it’s hypocritical of them to make Copilot.

                                  1. 7

                                    Oh by no means will I argue that Microsoft are not hypocritical. I think it’s morally valid though, and whether Microsoft reciprocates shouldn’t enter into it.

                                  2. 4

                                    Bit of a niggle, but it depends on the jurisdiction, really. Believe it or not, there exist jurisdictions where the Berne Convention is not recognized and as such it is perfectly legal to read it.

                                2. 13

                                  I’d personally relicense all my code to a license that specifically prohibits it from being used as input for a machine-learning system.

                                  This is specifically regarding text and images, but the principle applies.

                                  https://gerikson.com/m/2022/06/index.html#2022-06-25_saturday_01

                                  “It would violate Freedom Zero!” I don’t care. Machines aren’t humans.

                                  1. 15

                                    Machines aren’t humans.

                                    Exactly this. I think anthropomorphising abstract math executed in silicon is a trap for our emotional and ethical “senses”. We cannot fall for it. Machines and algorithms aren’t humans, aren’t even alive in any sense of the word, and this must inform our attitudes.

                                    1. 1

                                      Machines aren’t humans. That’s fine, but irrelevant.

                                      Machines aren’t alive. Correct, but irrelevant.

                                      If the rule doesn’t continue to make sense when we finally have general AI or meet sapient aliens, it’s not a good rule.

                                      That said, we certainly don’t have any human-equivalent or gorilla-equivalent machine intelligences now. We only have fuzzy ideas about how meat brains think, and we only have fuzzy ideas about how transformers match input to output, but there’s no particular reason to consider them equivalent. Maybe in 5 or 10 or 50 years.

                                      1. 2

                                        If the rule doesn’t continue to make sense when we finally have general AI or meet sapient aliens, it’s not a good rule.

                                        Won’t happen. If it does happen, we all die very soon afterwards.

                                        I think the rule is good. We could come up with a different rule: oxygen in the atmosphere is a good thing. If we reach general AI or meet sapient aliens, they might disagree. Does that mean the rule was bad all along? I feel similar about anthropomorphising machines. It’s not in our ecological interest to do so.

                                    2. 5

                                      Source distribution is like the only thing that’s not covered by Freedom Zero so you’re good there 🤷🏻‍♀️

                                      Arguably the GPL and the AGPL implicitly prohibits feeding it to copilot.

                                      (I personally don’t mind my stuff being used in copilot so don’t shoot the messenger on that.

                                      (I don’t mind opposition to copilot either, it sucks. Just, uh, don’t tag me.))

                                      1. 1

                                        Do we have a lawyer’s take here, because I’d be very interested.

                                        1. 4

                                          It’s the position of the Software Freedom Conservancy according to their web page. 🤷🏻‍♀️ It hasn’t been tried in court.

                                      2. 1

                                        I’m on board; however, I would, at least personally, make an exception if the machine-learned tool and it’s data/neural net were free, libre, and open source too. Of course the derivative work also needs to not violate the licenses too.

                                      3. 10

                                        Learning is not covered by the GPL’s requirements.

                                        For most intents and purposes, licences legally cover it as “creation of derived works”, otherwise why would “clean room design” ever exist. Just take a peek at the decompiled sources, you’re only learning after all.

                                        1. 5

                                          I think this depends on the level of abstraction. There’s a difference in abstraction between learning and copying - otherwise, clean room design would itself be a derivative work.

                                          1. 12

                                            I don’t understand what you mean. Clean-room implementation requires not having looked at the source of the thing you’re re-implementing. If you read the source code of a piece of software to learn, then come up with an independent implementation yourself, you haven’t done a clean-room implementation.

                                            1. 3

                                              Cleanroom requires having read a documentation of the thing you are reimplementing. So some part of the sequence read -> document -> reimplement has to break the chain of derivation. At any rate, my contention is that training a neural network to learn a concept is not fundamentally different from getting a human to document a leaked source code. You’re going from literal code to abstract knowledge back down to literal code.

                                              Would it really change your mind if OpenAI trained a second AI on the first AI in-between?

                                              1. 4

                                                At any rate, my contention is that training a neural network to learn a concept is not fundamentally different from getting a human to document a leaked source code.

                                                I think it’s quite different in the sense that someone reading the code’s purpose may come up with an entirely different algorithm to do the same thing. This AI won’t be capable of that - it is only capable of producing derivations. Sure, it may mix and match from different sources, but that’s not exactly the same as coming up with a novel approach. For example, unless there’s something like it in the source you feed it, I doubt the “AI” would be able to come up with Carmack’s fast inverse square root.

                                                1. 2

                                                  You can in theory get Codex to generate a comment from code, and then code from the comment. So this sort of process is entirely possible with it.

                                                  It might be an interesting study to see how often it picks the same algorithm given the same comment.

                                                2. 2

                                                  In copyright law, we have usually distinguished between an interface and an implementation. The difference there is always gonna be fuzzy, because law usually is. But with an AI approaches, there’s no step which distinguishes the interface and the implementation.

                                            2. 3

                                              One problem here is the same sort of thing that came up in the Oracle/Google case — what do you do with things that have one “obvious” way to do them? If I’m the first person to write an implementation of one of those “obvious” functions in a given language, does my choice of license on that code then restrict everyone else who ever writes in that language?

                                              And a lot (though of course not all) of the verbatim-copying examples that people have pointed out from Copilot have been on standard/obvious/boilerplate type code. It’s not clear to me that licensing ought to be able to restrict those sorts of things, though the law is murky enough that I could see well-paid attorneys arguing it either way.

                                          1. 10

                                            Excellent post, I strongly agree with this. One of the reasons I enjoy Elm is its radical simplicity (and, relatedly, its stability). I’ve been using Elixir more recently, and there’s a clear overhead to learning it and using it in comparison.

                                            Some of its complexity seems particularly unnecessary - eg there shouldn’t really be special syntax for calling anonymous functions, it’s not great to have different ways to access fields in structs vs maps, and so on. Possibly this highlights the “vertical” aspect of complexity - everything sits on top of a deep stack of other stuff these days. Perhaps the design of Elixir was constrained by the peculiarities of Erlang and OTP.

                                            Elixir still takes a commendably conservative approach to features in comparison to other languages like Rust, TypeScript and C++.

                                            In general, I feel like there’s an extremely cavalier approach to complexity at all levels of our industry, whether it’s designing PLs or writing software using them. That’s probably why, no matter how much tools and technologies seem to improve (on paper), it still takes a long time to create even an ostensibly simple piece of software.

                                            1. 14

                                              I’m finding that the most complex part of learning yet another language isn’t the language, it’s the tooling and ecosystem.

                                              TypeScript itself was fun and easy … but figuring out that config file the translator uses was annoying, and ditto for TSLint and Jester, and don’t get me started on the seventeen flavors of JS modules. Stuff like Grunt can die in a fire. (I now understand why some folks go nuts for radical simplicity and end up living in a cave running Gopher on their 6502-based retro computer: Node and the web ecosystem drove them to it. So much worse than C++, even with CMake.)

                                              1. 3

                                                Yes, that is true but I think there’s a compounding effect on complexity which means complexity at all levels is important to minimise. As an example, a more complex language requires more complex tools and more attempts at getting the tools right, which leads to the proliferation you mention. Some features can instead lead to proliferation of libraries (Smart pointers or regular pointers? Which of fifteen flavours of strings? Macros or regular functions? Etc.)

                                                Putting languages aside, isn’t it the same kind of disregard for complexity in all other areas (protocols, APIs, libraries etc.) that ultimately results in unwieldy ecosystems?

                                                We tend to underestimate how small bits of complexity compound and snowball, I think.

                                                1. 3

                                                  I strongly agree with this. Coming from Clojure on the JVM, I found it much more difficult to work on a project written in ClojureScript (supposedly the “same” language on a different runtime) than it was to learn Mirah (completely different language on the JVM).

                                                  Of course there are other factors like completely different paradigms that come out of left field (logic programming, category theory, etc) to make things difficult, but other than that, once you’ve got thee or four languages under your belt, learning a new one is much easier than learning a new runtime.

                                                2. 4

                                                  Some of its complexity seems particularly unnecessary - eg there shouldn’t really be special syntax for calling anonymous functions, it’s not great to have different ways to access fields in structs vs maps, and so on. Possibly this highlights the “vertical” aspect of complexity - everything sits on top of a deep stack of other stuff these days. Perhaps the design of Elixir was constrained by the peculiarities of Erlang and OTP.

                                                  Joe Armstrong discussed this in an article.

                                                  It’s because there is a bug in Erlang. Modules in Erlang are sequences of FORMS. The Erlang shell evaluates a sequence of EXPRESSIONS. In Erlang FORMS are not EXPRESSIONS.

                                                  The two are not the same. This bit of silliness has been Erlang forever but we didn’t notice it and we learned to live with it.

                                                  https://joearms.github.io/published/2013-05-31-a-week-with-elixir.html

                                                  1. 2

                                                    My Erlang is super rusty so I’m a bit fuzzy on this, but it looks to me like “forms” in this context basically means what other languages call statements; is that accurate?

                                                    It’s refreshing to see someone admitting their mistakes so openly.

                                                  2. 2

                                                    In general, I feel like there’s an extremely cavalier approach to complexity at all levels of our industry, whether it’s designing PLs or writing software using them.

                                                    This has been frustrating me to no end, especially in the last ~4 years. My pet theory is that the industry has been overtaken by a “tech consumerist” mindset, where the impact of incorporating new, shiny “tech products” into your codebase is greatly overestimated, while the cost of the added complexity is underestimated.. Curious to hear if you have a take on how this cavalier attitude became so prevalent.

                                                    1. 2

                                                      Very few major projects are considered minimalist. The knock on effect of this is that steers the imagination away from minimalism. From a maximalist viewpoint, PLs such as Lisp, Smalltalk, or ML look like toys because there seemingly isn’t enough stuff to learn.

                                                      1. 2

                                                        It’s often a question of choosing where to put complexity. In Verona, we’d really like to have Smalltalk-like user-defined flow control (though with static typing so that it can all be inlined in an ahead-of-time compiler with no overhead), where a match expression and a function call / lambda, and (checked) exception throwing / catching are the only things in the language and everything else is part of the standard library. This is a great thing for having a minimal language and also means that complex control flow constructs such as a range-based for loop for iterating over every other element of a collection in reverse order are as first-class as while loops.

                                                        We pushed quite a long way on this, but in a language that has linear types they add a huge amount of complexity in the type system. For example, consider this trivial case:

                                                        var x : iso; // Linear pointer to the entry point of a region.
                                                        if (a)
                                                        {
                                                          doSomethingWith(x);
                                                        }
                                                        else
                                                        {
                                                          doSomethingDifferentWith(x);
                                                        }
                                                        

                                                        The two lambdas (braces are used to define zero-argument lambdas in Verona) both need to capture x, but x is a linear type and so they can’t both capture it. There are some details here around the fact that else is actually an infix operator applied to the result of if here that I’m going to ignore for now but even without that, we need to be able to express in the type system that:

                                                        • The if...else construct takes two lambda that take zero arguments.
                                                        • Each lambda must be callable once.
                                                        • We don’t need to be able to call both lambdas together and so it’s fine for calling one to implicitly invalidate the other.
                                                        • The construct will definitely call one or the other, and so any properties that are true at the end of both (e.g. that x is still valid and was not consumed) can be assumed for type checking the surrounding block.

                                                        This is incredibly complex to make work at all, making it work and be something that mere mortals can use is basically impossible, so we’ve punted on it for our MVP and will build some control-flow constructs into the language.

                                                    1. 35

                                                      As I was reading this wonderful writeup, I had a nagging feeling that most certainly ‘someone on the internet’ will bring up some half-assed moralizing down to bear on the author. And sure enough, it’ the first comment on lobsters.

                                                      I think it’s a beautiful and inspiring project, making one think about the passage of time and how natural processes are constantly acting on human works.

                                                      @mariusor, I recommend you go troll some bonsai artists, they too are nothing but assholes who carve hearts in trees.

                                                      1. 8

                                                        We do have an ethical obligation to consider how our presence distorts nature. Many folks bend trees for many purposes. I reuse fallen wood. But we should at least consider the effects we have on nature, if for no other reason than that we treat nature like we treat ourselves.

                                                        I could analogize bonsai to foot-binding, for example. And I say that as somebody who considered practicing bonsai.

                                                        1. 12

                                                          Foot binding is a social act in which women are deliberately crippled in exchange for access to certain social arrangements in which they don’t need to be able to walk well. The whole practice collapsed once the social arrangement went away. It’s very different than just getting a cool gauge piercing or whatever.

                                                          1. 7

                                                            Thank you Corbin for addressing the substance of my admittedly hot-headed comment. It did give me food for thought.

                                                            I am definitely in agreement with you on the need to consider the impact of our actions on the environment. I have a bunch of 80-year old apple trees in my yard which were definitely derailed, by human hands, from their natural growth trajectory. This was done in the interest of horticulture, and I still benefit from the actions of the now-deceased original gardener. All in all I think the outcome is positive, and perhaps will even benefit others in the future if my particular heritage variety of apple gets preserved and replicated in other gardens. In terms of environmental impact, I’d say it’s better for each backyard to have a “disfigured” but fruitful apple tree than to not have one, and rely on industrial agriculture for nutrition.

                                                            Regarding the analogy with foot-binding, which I think does hold to a large extent (i.e it involves frustrating the built-in development pattern of another, without the other’s consent) – the key difference is of course the species of the object of the operation.

                                                            1. 7

                                                              Scale matters too, I think.

                                                              I’m a gardener who grows vegetables, and I grow almost everything from seed - it’s fun and cheap. That means many successive rounds of culling: I germinate seeds, discard the weakest and move the strongest to nursery pots, step out the strongest starts to acclimatize to the weather, plant the healthiest, and eventually thin the garden to only the strongest possible plants. I may start the planting season with two or three dozen seeds and end up with two plants in the ground. Then throughout the year, I harvest and save seeds for next, often repeating the same selecting/culling process.

                                                              Am I distorting nature? Absolutely, hundreds of times a year - thousands, perhaps, if I consider how many plants I put in the ground. But is my distortion significant? I don’t think so; I don’t think that, even under Kant’s categorical imperative, every back-yard gardener in the universe selecting for their own best plants is a problem. It fed the world, after all!

                                                              1. 3

                                                                My friend who is a botanist told me about research he did into how naïve selection produces worse results. Assume you have a plot with many variants of wheat, and at the end of the season, you select the best in the bunch for next year. If you’re not careful, the ones you select are the biggest hoarders of nutrients. If you had a plot with all that genotype, it would do poorly, because they’re all just expertly hoarding nutrients away from each other. The ones you want are the ones that are best at growing themselves while still sharing nutrients with their fellow plants. It’s an interesting theory and he’s done some experiment work to show that it applies in the real world too.

                                                                1. 2

                                                                  The ones you want are the ones that are best at growing themselves while still sharing nutrients with their fellow plants.

                                                                  So maybe you’d also want to select some of the ones next to the biggest plant to grow in their own trials as well.

                                                          2. 3

                                                            I think it’s a beautiful and inspiring project, making one think about the passage of time and how natural processes are constantly acting on human works.

                                                            I mean… on the one hand, yes, but then on the other hand… what, we ran out of ways to make one think about the passage of time and how natural processes are constantly acting on human works without carving into things, so it was kind of inevitable? What’s wrong with just planting a tree in a parking lot and snapping photos of that? It captures the same thing, minus the tree damage and leaving an extra human mark on a previously undisturbed place in the middle of the forest.

                                                            1. 14

                                                              As I alluded in my comment above, we carve up and twist apple trees so that the actually give us apples. If you just let them go wild you won’t get any apples. Where do you get your apples from? Are you going to lecture a gardener who does things like grafting, culling, etc., to every tree she owns?

                                                              The same applies here: the artist applied his knowledge of tree biology and his knowledge of typography to get a font made by a tree. I think that’s pretty damn cool. I am very impressed! You can download a TTF! how cool is that?

                                                              Also, it’s not ‘in the middle of a forest’, but on his parents’ property, and the beech trees were planted by his parents. It’s his family’s garden and he’s using it to create art. I don’t get the condemnation, I think people are really misapplying their moral instincts here.

                                                              1. 5

                                                                Are you going to lecture a gardener who does things like grafting, culling, etc., to every tree she owns?

                                                                No, only the gardeners who do things like grafting, culling etc. just to write a meditative blog post about the meaning of time, without otherwise producing a single apple :-). I stand corrected on the forest matter, but I still think carving up trees just for the cool factor isn’t nice. I also like, and eat, beef, and I am morally conflicted about it. But I’m not at all morally conflicted about carving up a living cow just for the cool factor, as in, I also think it’s not nice. Whether I eat fruit (or beef) has no bearing on whether stabbing trees (or cows) for fun is okay.

                                                                As for where I get my apples & co.: yes, I’m aware that we carve up and twist apple trees to give us apples. That being said, if we want to be pedantic about it, back when I was a kid, I had apples, a bunch of different types of prunes, sour cherries, pears and quince from my grandparents’ garden, so yeah, I know where they come from. They pretty much let the trees go wild. “You won’t get any apples” is very much a stretch. They will happily make apples – probably not enough to run a fruit selling business off of them, but certainly enough for a family of six to have apples – and, as I very painfully recall, you don’t even need to pick them if you’re lazy, they fall down on their own. The pear tree is still up, in fact, and at least in the last 35 years it’s never been touched in any way short of picking the pears on the lowest two or three branches. It still makes enough pears for me to make pear brandy out of them every summer.

                                                                1. 6

                                                                  I concede your point about the various approaches as to what is necessary and unnecessary tree “care” :)

                                                                  No, only the gardeners who do things like grafting, culling etc. just to write a meditative blog post about the meaning of time, without otherwise producing a single apple :-).

                                                                  But my argument is that there was an apple produced, by all means. You can enjoy it here: https://bjoernkarmann.dk/occlusion_grotesque/OcclusionGrotesque.zip

                                                            2. 3

                                                              Eh. I hear what you’re saying, but you can’t ignore the fact that “carving letters into trees” has an extremely strong cultural connection to “idiot disrespectful teenagers”.

                                                              I can overlook that and appreciate the art. I do think it’s a neat result. But then I read this:

                                                              The project challenges how we humans are terraforming and controlling nature to their own desires, which has become problematic to an almost un-reversible state. Here the roles have been flipped, as nature is given agency to lead the process, and the designer is invited to let go of control and have nature take over.

                                                              Nature is given agency, here? Pull the other one.

                                                              1. 3

                                                                You see beautiful and wonderful writeup, I see an asshole with an inflated sense of self. I think it’s fair that we each hold to our own opinions and be at peace with that. Disrespecting me because I voiced it is not something I like though.

                                                                1. 15

                                                                  I apologize at venting my frustration at you in particular.

                                                                  This is a public forum though, and just as you voiced your opinion in public, so did I. Our opinions differ, but repeatedly labeling other as “assholes” (you did in in your original post and in the one above) sets up a heated tone for the entire conversation. I took the flame bait, you might say.

                                                                  Regarding ‘inflated sense of self’ – my experience with artists in general (I’ve lived with artists) is that it’s somewhat of a common psychological theme with them, and we’re better off judging the art, not the artist.

                                                              1. 4

                                                                Thank you so much for the writeup, nomemory. I seem to be in the minority but I simply adore blog posts/essays that are like: “here is some code, let’s talk about how it works”. What an excellent ‘advent of code’ idea, too! Something to try to emulate come December ’22.

                                                                1. 4

                                                                  Out of all the languages I’ve working with during my career, Erlang and POSIX shell have felt the most ‘solid’. I can look at a shell script or Erlang program written in the last 30 years and be confident that I

                                                                  1. can understand it
                                                                  2. can run it on modern systems

                                                                  Erlang definitely doesn’t shine in the pure-functional department. Its type system is very lispy, not offering the wonders of what ML-based systems give you. … yet despite all that, it’s a very fun and elegant programming environment, and I could see it hanging around long-term.

                                                                  1. 4

                                                                    Very cool writeup Ntietz. I think as more and more applications diverge from the old-school request -> DB-work -> render-output webapp model, we’ll find ourselves “breaking the rules” more often.

                                                                    This type of architecture makes me happy – Erlang/Elixir programs can very often really capitalize on this pattern (see, for example, caching user-local data in a Phoenix Channel for the duration of a socket’s existence).

                                                                    1. 1

                                                                      Elixir and the BEAM definitely make this easy to do and can be used to great effect. I’m really excited to see what comes about with Phoenix LiveView (and the similar projects in other languages) leveraging connection state and lots of backend processing.

                                                                    1. 8

                                                                      I love this idea and hooked this up after I found out about it several years ago. On the very same day I started getting CAPTCHAs on multiple websites, and the ‘mainstream web’ became unusable, unfortunately. The algorithms protecting advisors from click fraud are too sophisticated (or at least were, last time I checked) for this approach to work. I’ll just stick to dns-based adblock

                                                                      1. 7

                                                                        This sounds wonderful to me.

                                                                        1. 7

                                                                          I was thinking just the same. Data-oriented, dataflow, data persistence and discoverability, easy way to run and release… Getting to the same outcomes with current cloud tech is a year long mission on constantly moving grounds.

                                                                          1. 4

                                                                            Oh, definitely. And the grounds move at someone else’s whim, completely outside of our control, making us play catch up.

                                                                            1. 4

                                                                              It’s like a view into a world that developed without being trapped in the Unix zeitgeist. I’m sure that there’s a load of it that’s nightmarish but it would at least be differently terrible.

                                                                              1. 7

                                                                                I’ll disagree a little–it’s not the Unix zeitgeist, but (I posit) the tolerance of bikeshedding and worrying about the “right way” of getting things done instead of just, you know, solving the immediate business problem.

                                                                                The large evolutionary pressure seems to be “we need to be a force multiplier for the folks that use Excel and know more than us”. Such a world doesn’t get bogged-down in React version rewrites, devops fads, or whatever.

                                                                                (It does, of course, have other nightmares as you note!)

                                                                                1. 1

                                                                                  That’s fair. I’m a noted anti-Unix zealot, so.

                                                                                  1. 2

                                                                                    No harm in it!

                                                                              2. 3

                                                                                I agree! If an organization is focused on solving things in their problem domain, they will build software that helps them solve their problems. In fact, they will build software that helps them build software. In time, there will be a very custom programming environment that has been tuned to addressing needs in your domain and nothing more.

                                                                                This is also, as I understand it, the mindset behind thinks like k and qdb. It’s a toolset that’s evolved in a very specific niche and has accumulated years of evolutionary adaptations to performing in that niche. From what I understand this is also how Jane Street runs their technical org - you first go through a bootcamp, learning how to develop “jane street” code in the “jane street” ide (emacs + all the things they’ve added). If someone from JS is reading this, please corroborate if you can.

                                                                                Not being beholden to whatever google (k8s) or facebook (graphql, react) tell you to use this year is a big plus in my book. Focus on the problem and how to solve it. The bonus is that folks in your org can actually master a large part of the stack they use to run the show.

                                                                            1. 1

                                                                              If there are any forth experts here, perhaps you can help me past this extremely basic problem I’m having. My gforth system apparently does not know the word [:. net2o uses this word in err.fs, and so I can’t get the project to run.

                                                                              $ cat rep.fs; gforth ./rep.fs -e bye
                                                                              : print-some-warning ( n -- )
                                                                               [: cr ." warning# " . ;] stderr outfile-execute :
                                                                              
                                                                              in file included from *OS command line*:-1
                                                                              rep.fs:2: Undefined word
                                                                               >>>[:<<< cr ." warning# " . ;] stderr outfile-execute :
                                                                              Backtrace:
                                                                              $7FE497110A00 throw 
                                                                              $7FE497126C08 no.extensions 
                                                                              $7FE497114338 compiler-notfound1 
                                                                              

                                                                              What am I missing here? Gforth version 0.7.3, void linux AND gforth 0.7.3 on ubuntu:latest

                                                                              Edit: From what I understand the word [: is a built-in feature of gforth.

                                                                              1. 2

                                                                                FWIW I do know some Forth and got the same issue with gforth 0.7.3 on Ubuntu. I wonder if you need to include some file to get the quoting syntax?

                                                                              1. 22

                                                                                What a perfect name. I’m assuming the gag was intended :) “Aho” (or ahō) in slang Japanese means “idiot”, which is was “git” means in slang English.

                                                                                1. 14

                                                                                  I sure hope Alfred Aho (the “A” in AWK) doesn’t know this…

                                                                                  1. 7

                                                                                    New site idea: enter a name, and it searches world dictionaries for derogatory meanings in various languages.

                                                                                    1. 3

                                                                                      I’m pretty sure he does.

                                                                                    2. 8

                                                                                      petition to reserve such a perfect name for a version written in true awk. this one should be called gaho.

                                                                                      1. 2

                                                                                        Funny coincidence! Also see Alfred Aho of the Aho-Corasick algorithm.

                                                                                        1. 3

                                                                                          Aho is also the A in AWK.

                                                                                          1. 1

                                                                                            I figured, based on sibling comment.

                                                                                      1. 2

                                                                                        Congrats to the team! Hope this unlocks bigger opportunities tech-wise and business-wise. I’m not exactly surprised to hear the news, but I think it is a very good move. The company can now focus on delivering things while maintaining a high level of engineering skill.

                                                                                        1. 1

                                                                                          https://lobste.rs/u/studzien and I have been using our home-grown parser/constructor library to good effect, for similar use cases.

                                                                                          1. 2

                                                                                            Beautiful work, as can be expected from this author.

                                                                                            1. 8

                                                                                              Somewhat related story: on a non-work linux laptop my wife ended up with a directory of 15 million files. The full story is here http://pzel.name/til/2020/08/30/Large-directory-feature-not-enabled-on-this-filesystem.html I used find . to list all the files, which surprisingly did not hang.

                                                                                              1. 1

                                                                                                I was wondering if find . would hang in the same way. ls is actually notoriously bad at listing files when it gets over a certain amount.

                                                                                              1. 7

                                                                                                Author’s summary:

                                                                                                I made Ink as an experiment to study writing interpreters and compilers in mid-2019. Since then, I’ve worked on several other related projects in the programming language space, but continue to write programs and apps in Ink in my day to day work. Because the language and runtime is so small, it’s easy for me to understand the entire stack and debug Ink programs easily. Because Ink’s interpreter is a single static binary that runs across operating systems, deploying Ink programs is also pretty simple.

                                                                                                What makes this one relevant (vis-a-vis the multitudes of toy or in-progress PLs posted to lobsters at least monthly), is that the author has actually been using it to build some very interesting pieces of software.

                                                                                                1. 2

                                                                                                  Does SO itself strongly reject this advice? For a long time they were proud of bucking the trend of cloud-scale deployments and just managing some small amount of beefy servers themselves.

                                                                                                  Edit: nvm I see they cover it in the article

                                                                                                  1. 3

                                                                                                    For those who don’t bother reading the article: when StackOverflow launched, Azure was brand-new, Windows didn’t support containers, and Kubernetes didn’t exist. I remember as late as roughly 2012, the Stack team told the Azure team what they’d need in hosted SQL Server alone to go entirely to the cloud, and the Azure team effectively just blanched and dropped it. (I worked at Fog Creek at the time, and we’d do beer o’clock together fairly often and swap stories.)

                                                                                                    It’s obviously an entirely different ballgame in 2021, so they’re allowed to change their minds.

                                                                                                    1. 8

                                                                                                      It’s obviously an entirely different ballgame in 2021, so they’re allowed to change their minds.

                                                                                                      I think a lot of people here and HN would argue that the trend over the past decade has not been good, and the old way really was better. They say the move toward containers and cloud services is driven by hype, fashion, and particularly cloud vendors who have something to sell.

                                                                                                      I admit I was sad to learn that Stack Exchange is no longer bucking the trend. Yes, I make heavy use of cloud infrastructure and containers (currently Amazon ECS rather than k8s) in my own work, and have often publicly defended that choice. But the contrarian, anti-fashion streak still has its appeal.

                                                                                                      1. 2

                                                                                                        Most of the contrarians are wrong: the old systems were not better, simple, easy to learn, or easy to use. The old way of every place above a certain size and/or age having their own peculiar menagerie of home-grown systems, commercial products, and open source projects bodged together hopefully with teams to support them just was how it was. But you got used to it and learned the hidden or half-documented footguns and for a time there weren’t better choices. Now there are choices and a different landscape (you don’t have to run your own DC), and many of them are very good and well-documented, but they’re still high in complexity and in depth when things go wrong. I think the greatest advantage is where they interact with home-grown systems they can be cordoned and put behind common interfaces so you can come in an say, “Oh, this is an operator doing xyz” and reason a little about it.

                                                                                                        1. 6

                                                                                                          I think there are just as many – or more – footguns with the overly deep and complex virtualization/orchestration stacks of today. In the “old days” senior developers would take time to introduce juniors into the company culture, and this included tech culture.

                                                                                                          Nowadays developers are expected to be fungible, tech cultures across companies homogeneous, and we’ve bought into the control mechanisms that make this happen, hook line and sinker. </end-ochruch-poast>

                                                                                                          1. 1

                                                                                                            Nowadays developers are expected to be fungible, tech cultures across companies homogeneous, and we’ve bought into the control mechanisms that make this happen

                                                                                                            Lol why is this bad? Imagine if your doctor wasn’t fungible. You’re ill and your doctor retires, well, time for you to not have a doctor. Moreover homogeneity leads to reliability and safety. Again imagine if each doctor decided to use a different theory of medicine or a different set of instruments. One of our doctors believes in blood leeches, the other in herbal medicine, which one is right? It’s always fun to be the artisan but a lot less fun to receive the artisan’s services, especially when you really need them.

                                                                                                            1. 3

                                                                                                              Lol the doctors whom I trust with my health (and life) are not fungible, because I know them and their philosophy personally. If I want blood leeches I will go to the doctor who uses them well.

                                                                                                              1. 1

                                                                                                                So what if they retire or get sick themselves? What if you get sick badly somewhere away from your home? Also, do you expect everyone to do this level of due diligence with all services that people use?

                                                                                                  1. 5

                                                                                                    The original David Parnas paper on extensible code is titled “Designing Software for Ease of Extension and Contraction.”

                                                                                                    Extension means adding cases, contraction means deleting them.

                                                                                                    The contraction bit was always there.

                                                                                                    Extension and contraction go hand in hand; they’re both consequences of well designed modularity.

                                                                                                    I strongly recommend reading that Parnas paper, as well as that on modularity, if by any bad luck you haven’t yet.

                                                                                                    1. 1

                                                                                                      Thank you for the paper recommendation. The modularity paper seems a lot more often-referenced than the one you bring up.

                                                                                                      1. 1

                                                                                                        I like the paper a lot. A key insight is to specify the “minimal requirement” and build up from there. If every software project has two requirement set, one being “minimal”, another being “all plugins installed, full bloated state”, it will be a lot easier to keep a modular architecture. The product designer, instead of programmer, should be responsible for specifying how these two requirement set can be met in the same time. The solution of modularity problem might not in the hands of programmer, but in the product designing side.

                                                                                                      1. 4

                                                                                                        I feel what’s more valuable than the new environment variable proposal is learning all the ways to turn off telemetry in all the tools the author mentioned.

                                                                                                        1. 7

                                                                                                          If all of those variables are known, why not make a shim that will toggle them all based on the new environment variables?

                                                                                                          1. 2

                                                                                                            This is a great idea. Like the community-sourced /etc/hosts directories, adblock lists, and the like, it has an actual chance of remaining “in play” as long as there are folks who care about the topic.

                                                                                                          2. 2

                                                                                                            I believe figuring out if what you’re using is going to include telemetry and how to turn it off your self is the most sustainable way to move forward.

                                                                                                            I’ve gotten “used to” Microsoft’s .NET Telemetry so I know to add the flag before I even download it. When you first install .NET Core it will spit out how to opt out, but i’m assuming this is after they’ve already phoned home to say someone has installed.