1. 96

    Static or dynamic refers to whether the webserver serves requests by reading a static file off disk or running some dynamic code (whether in process or not). While the word “dynamic” can apply broadly to any change, reusing a term with a well-understood definition in this context to refer to unrelated changes like SSL cert renewal and HTTP headers is really confusing. Late in the article it refers to “the filesystem API used to host static files” so it’s clear the author knows the definition. It’s unfortunate that the article is written in this way; it’s self-fulfilling that misusing a clear and well-established term just results in confusion. Maybe a better metaphor for the points it’s trying to make would be Stewart Brand’s concept of pace layering.

    1. 12

      Yeah I agree, I think the article is generally good, but the title is misleading.

      My summary is “We should try to make dynamic sites as easy to maintain as static sites”, using sqlite, nginx, whatever.

      The distinction obviously exists – in fact the article heavily relies on the distinction to make its point.

      I agree with the idea of moving them closer together (who wouldn’t want to make dynamic sites easier to maintain?) But I think there will be a difference no matter what.

      Mainly that’s because the sandboxing problem (which consists of namespace isolation and resource isolation) is hard on any kernel and on any hardware. When you have a static site, you don’t need to solve that problem at all.

      We will get better at solving that problem, but it will always be there. There are hardware issues like Spectre and Meltdown (which required patches to kernels and compilers!), but that’s arguably not even the hardest problem.


      I also think recognizing this distinction will lead to more robust architectures. Similar to how progressive enhancement says that your website should still work without JS, your website’s static part should still work if the dynamic parts are broken (the app servers are down). That’s just good engineering.

      1. 3

        Funnily enough, sqlite + nginx is what I use for most of my smaller dynamic websites, usually wish a server process as well.

        EDIT: Reading further, yeah, almost all of my side projects use that setup, outside of some Phoenix stuff, and I’ve definitely noticed those projects requiring not very much maintenance at all.

        1. 7

          What’s also a bit funny is that sqlite and nginx are both extremely old school, state machine-heavy, plain C code.

          Yet we reach for them when we want something reliable. I recommend everyone look at the source code for both projects.

          This reminds me of these 2 old articles:

          https://tratt.net/laurie/blog/entries/how_can_c_programs_be_so_reliable.html

          http://damienkatz.net/2013/01/the_unreasonable_effectiveness_of_c.html

          (And I am not saying this is good; I certainly wouldn’t and can’t write such C code. It’s just funny)

          1. 1

            SQLite, at least, partially compensates via extensive testing, and a slow/considered pace of work (or so I understand). It’s the antithesis of many web-apps in that regard. And the authors come from a tradition that allows them to think outside the box much more than many devs, and do things like auto-generate the SQLite C header, rather than trying to maintain it by hand.

            C and C++ can be used effectively, as demonstrated by nginx, sqlite, curl, ruby, python, tcl, lua and others, but it’s definitely a different headspace, as I understand it from dipping into such things just a bit.

          2. 6

            I did not know that nginx can talk to sqlite by itself. Can you share your setup?

            1. 1

              For me, I don’t use nginx talking directly to SQLite, I just use it as a reverse proxy. It’s just that it makes it easy to set up a lot of websites behind one server, and using SQLite makes it easy to manage those from a data storage standpoint.

              1. 1

                I see, yes that makes sense. I use it that way too.

        2. 11

          You articulated that without using expressions that would be inappropriate in the average office setting. I admire you for that.

          The whole act of reusing a common, well-understood content-related term to instead refer to TLS certs and HTTP headers left me ready to respond with coarse language and possibly question whether OP was trolling.

          The idea that maybe we’re comparing a fast layer to a slow layer is somewhat appealing, but I don’t think it quite fits either. I think OP is muddling content and presentation. Different presentations require differing levels of maintenance even for the same content. So if I publish a book, I might need to reprint it every few hundred years as natural conditions cause paper to degrade, etc. Whereas if I publish the same content on a website, I might need to alter the computer that hosts that content every X days as browsers’ expectations change.

          That content doesn’t change. And that’s what we commonly mean when we say “a static website.” The fact that the thing presenting the content needs to change in order to adequately serve the readers doesn’t, in my view, make the content dynamic. And I don’t think it moves it from a slow layer to a faster one either.

          1. 5

            This is a reasonable criticism, but I think it’s slightly more complicated than that — a collection of files in a directory isn’t enough to unambiguously know how to correctly serve a static site. For instance, different servers disagree on the file extension → mimetype mapping. So I think you need to accept that you can’t just “read a static file off disk”, in order to serve it, you also need other information, which is encoded in the webserver configuration. But nginx/apache/etc let you do surprisingly dynamic things (changing routing depending on cookies/auth status/etc, for instance). So what parts of the webserver configuration are you allowed to use while still classifying something as “static”?

            That’s what I’m trying to get at — a directory of files can’t be served as a static site without a configuration system of some sort, and actual http server software in order to serve a static site. But once you’re doing that sort of thing, how do you draw a principled line about what’s “static” and what isn’t?

            1. 7

              Putting a finer point on the mimetype thing, since I understand that it could be seen as a purely academic issue: python2 -m SimpleHTTPServer and python3 -m http.server will server foo.wasm with different mimetypes (application/wasm and application/octet-stream) Only the wasm bundle served by the python3 version will be executed by browsers, due to security constraints. Thus, what the website does, in a very concrete way, will be dependent not on the files, but on the server software. That sounds like a property of a “dynamic” system to me — why isn’t it?

              You could say, ok, so a static website needs a filesystem to serve from and a mapping of extensions to content types. But there are also other things you need — information about routing, for instance. What domain and port is the content supposed to be served on, and at what path? If you don’t get that correct, links on the site likely won’t work. This is typically configured out of band — on GitHub pages, for instance, this is configured with the name of the repo.

              So you need a extension to mimetype mapping, and routing information, and a filesystem. But you can have a static javacsript file that then goes and talks to the sever it was served from, and arbitrarily changes its behavior based on the HTTP headers that were returned. So really, if you want a robust definition of what a “static” website is, you need to pretty completely describe the mapping between HTTP requests and HTTP responses. But isn’t “a mapping between HTTP requests and HTTP responses” just a FP sort of way of describing a dynamic webserver?

              If you disagree with some part of this chain of logic, I’m curious which part.

              1. 6

                All the configuration parts and “dynamic” nature of serving files in a static site are about that: serving them, how the file gets on my computer. But at the end of the day, with a static site the content of the document I get is the same as the content on the filesystem on the server. And with a dynamic site it is not. That is the difference. It’s about what is served.

                All this talk about mime types and routing just confuses things. One can do the same kinds of tricks with a file system and local applications. For instance: changing the extension, setting default applications, etc. can all change the behavior you observe by opening a file. Does that mean my file system is dynamic too? Isn’t everything dynamic if you look at it that way?

                1. 6

                  It seems very odd to be talking about whether or not WASM gets executed to make a point about static websites.

                  When the average person talks about a static site, they are talking about a document-like site with some HTML, some CSS, maybe some images. Yes, there may be some scripting, but it’s likely to be non-essential to the functionality of the site. For these kinds of sites, in practice MIME types are basically never something you as the site author will have to worry about. Every reasonable server will serve HTML, CSS, etc. with reasonable MIME types.

                  Sure, you can come up with some contrived example of an application-like site that reliant on WASM to function and call it a static site. But that is not what the phrase means in common usage, so what point do you think you are proving by doing so?

                  1. 4

                    You can also misconfigure nginx to send html files as text/plain, if that is your point. python2 predates wasm, it’s simply a wrong default -today-.

                    1. 3

                      What about that is “misconfigured”? It’s just configuration, in some cases you might want all files to be served with a particular content type, regardless of path.

                      My point is that just having a set of files doesn’t properly encode the information you need to serve that website. That, to me, seems to indicate that defining a static site as one that responds to requests by “reading static files off disk” is at the very least, incomplete.

                      1. 3

                        I think this discussion is kind of pointless then.

                        Ask 10 web developers and I bet 9 would tell you that they will assume a “normal” or “randomly picked” not shit webserver will serve html/png/jpeg/css files with the correct header so that clients can meaningfully interpret them. It’s not really a web standard but it’s common knowledge/best practice/whatever you wanna call it. I simply think it’s disingenious to call this proper configuration then and not “just assuming any webserver that works”.

                    2. 2

                      I found your point (about the false division of static and dynamic websites) intuitive, from when you talked about isolation primitives in your post. (Is a webserver which serves a FUSE filesystem static or dynamic, for example? What if that filesystem is archivemount?)

                      But this point about MIME headers is also quite persuasive and interesting, perhaps more so than the isolation point, you should include it in your post.

                      Given this WASM mimetype requirement, what happens when you distribute WASM as part of a filesystem trees of HTML files and open it with file://? Is there an exception, or… Is this just relying on the browser’s internal mimetype detection heuristics to be correct?

                      1. 2

                        Yeah, I probably should have included it in the post — I might write a follow up post, or add a postscript.

                        Loading WASM actually doesn’t work from file:// URLs at all! In general, file:// URLs are pretty special and there’s a bunch of stuff that doesn’t work with them. (Similarly, there are a handful of browser features that don’t work on non-https origins). If you’re doing local development with wasm files, you have to use a HTTP server of some sort.

                        1. 3

                          Loading WASM actually doesn’t work from file:// URLs at all!

                          Fascinating! That’s also good support for your post! It disproves the “static means you can distribute it as a tarball and open it and all the content is there” counter-argument.

                          1. 1

                            This is for a good reason. Originally HTML pages were self-contained. Images were added, then styles and scripts. Systems were made that assumed pages wouldn’t be able to just request any old file, so when Javascript gained the ability to load any file it was limited to only be able to load files from the same Origin (protocol + hostname + port group) to not break the assumptions of existing services. But file:// URLs are special, they’re treated as a unique origins so random HTML pages on disk can’t exfiltrate all the data on your drive. People still wanted to load data from other origins, so they figured out JSONP (basically letting 3rd-party servers run arbitrary JS on your site to tell you things because JS files are special) and then browsers added CORS. CORS allowed servers to send headers to opt in to access from other origins.

                            WebAssembly isn’t special like scripts are, you have to fetch it yourself and it’s subject to CORS and the same origin policy so loading it from a file:// URL isn’t possible without disabling security restrictions (there are flags for this, using them is a bad idea) but you could inline the WebAssembly file as a data: URL. (You can basically always fetch those.)

                      2. 2

                        What domain and port is the content supposed to be served on, and at what path? If you don’t get that correct, links on the site likely won’t work.

                        These days when getting a subdomain is a non-issue, I can’t see why anyone would want to use absolute URLs inside pages, other than in a few very special cases like sub-sites generated by different tools (e.g. example.com/docs produced by a documentation generator).

                        I also haven’t seen MIME type mapping become a serious problem in practice. If a client expects JS or WASM, it doesn’t look at the MIME type at all normally because the behavior for it is hardcoded and doesn’t depend on the MIME type reported by the server. Otherwise, for loading non-HTML files, whether the user agent displays it or offers to open it with an external program by default isn’t a big issue.

                        1. 3

                          MIME bites you where you least expect it. Especially when serving files to external apps or stuff that understands both xml and json and wants to know which one it got. My last surprise was app manifests for windows click-once updates which have to have their weird content-type which the app expects.

                          1. 2

                            If a client expects JS or WASM, it doesn’t look at the MIME type at all normally because the behavior for it is hardcoded and doesn’t depend on the MIME type reported by the server.

                            This is incorrect. Browsers will not execute WASM from locations that do not have a correct mimetype. This is mandated by the spec: https://www.w3.org/TR/wasm-web-api-1/

                            You might not have seen this be a problem in practice, but it does exist, and I and many other people have ran into it.

                            1. 1

                              Thanks for the pointer, I didn’t know that the standard requires clients to reject WASM if the MIME type is not correct.

                              However, I think the original point still stands. If the standard didn’t require rejecting WASM with different MIME types but some clients did it on their own initiative, then I’d agree that web servers with _different but equally acceptable behavior could make or break the website. But if it’s mandated, then a web server that doesn’t have a correct mapping is incorrectly implemented or misconfigured.

                              Since WASM is relatively new, it’s a more subtle issue of course—some servers/config used to be valid, but no longer are. But they are still expected to conform with the standard now.

                          2. 1

                            You don’t need any specific mimetype for WASM, you can load bytes however you want and pass them to WebAssembly.instantiate as an ArrayBuffer.

                        2. 3

                          The other replies have explained this particular case in detail, but I think it’s worth isolating the logical fallacy you’re espousing. Suppose we believe that there are two distinct types of X, say PX and QX. But there exist X that are simultaneously PX and QX. Then those existing X are counterexamples, and we should question our assumption that PX and QX were distinct. If PX and QX are only defined in opposition to each other, then we should also question whether P and Q are meaningful.

                          1. 10

                            Names in databases really do suck. While we’re on the subject of broken schemas, I have a bone to pick with addresses too.

                            People who live in apartments frequently have to fill out the “address line 2 field” for an apartment/suite number, but some sites expect to jam it all into “address line 1” and will complain that it’s “too long”. I’ve also seen sites that will only let you specify a single number for the suite/unit when it should be freeform. Some sites will also force everything to be all caps, which isn’t more correct than what I input. Even USPS does some of this stuff, as well as classifying addresses into “commercial” addresses, then banning you from submitting an address change request if they think you’re moving to a so-called commercial address.

                            The worst sites are the ones that refuse to accept an address unless accepted by some address validation service. If you live in a new location, a location that was recently annexed into a city, a location that’s just weird enough (aka not a single family home in a rich suburb) to not be in the system, you’re screwed. Only use address validators if you let users override them. I know where I live, damn it!

                            And that’s just for places I’ve lived personally. There’s probably a bunch more issues for rural areas and international addresses.

                            1. 8

                              For a few years I lived in an apartment building that had retail on the first floor, with an entrance for each. If a delivery went to the wrong door it usually was lost or stolen, but specifying the correct door went on the second line of the address. USPS always saw it, but the harried, closely-monitored package delivery services almost never did. So I’d swap to put that on the first line, which is invalid but always worked. Except when blocked by a site that required using an address their “validator” approved of. It’s very frustrating to have a site tell me I don’t know my own address.

                                1. 2

                                  Until recently we didn’t have postcodes in Ireland. It was always a fun dance trying to figure out which combo of “”, “NA”, “ N/A”, “000”, “ 000000” etc would be accepted.

                                  And then of course the package would show up on your door with the nonsense postcode proudly printed on it.

                                  1. 2

                                    The UK is interesting for this type of thing because UK addresses basically break almost every assumption about addresses. Houses without a number and houses on streets that don’t have a name are quite common. Another thing that annoys me to no end, systems insisting that the country has to be “United Kingdom” when it’s almost always better to put the actual country in the country field (e.g. England, Scotland, etc).

                                    1. 1

                                      The nice thing is that house name or number + postcode always uniquely identifies an address in the UK. Unfortunately, a lot of things don’t take advantage of this. My address is {number}, {road name}, {postcode} but there are two blocks of flats on the same road that have the address {number}, {block of flats name}, {road name}, {postcode}, where the number and road name are the same as my address but the postcode is different. Delivery drivers (especially food delivery ones) often come to my house when they’re aiming for one of the flats.

                                    2. 2

                                      Validators are such a pain. A store I go to always asks for a phone number for their rewards account. In the last few months, some idiot decided they should validate all of the phone numbers in their database…

                                      Of course, the phone number I’ve used for seven years doesn’t validate. Along with hundreds of other people who shop there.

                                    1. 8

                                      The argument here feels pretty odd to me. “Lisp prevents developers from being fungible” is a stone’s throw away from, “Lisp developers write code that nobody else can maintain.” Which I know for a fact isn’t true (or at least not universally true) but it doesn’t seem like a great sales pitch.

                                      I don’t want to go on vacation or quit a job and have my project fall apart because I was completely non-fungible.

                                      I also fundamentally disagree that companies in general are unwilling to let developers use tools that maximize productivity. Sure, there are companies where godawful tools get mandated from above (say “Mulesoft” to me and watch my eye twitch) but there are also a lot of them where the engineering team has free rein to choose its own tools.

                                      This post should be tagged rant IMO because it comes off like a bitter rant.

                                      1. 4

                                        I agree with this criticism, and my limited, unprofessional experience with Lisp macros and similar features has been than I am a fungible cog when I return to a project after a few months away. I might half-remember where the clever bits are, but not how they work or what the gotchas are.

                                      1. 35

                                        Why did GitHub remove his account/projects?

                                        1. 44

                                          That’s the part that bothers me.

                                          I understand it wasn’t a nice thing to do, and that people are upset, but it’s his own code in his own repos. He even announced ahead of time he would do something like this, so “buyer” beware.

                                          I realize GitHub TOS covers them to remove accounts and repos at their discretion, but it’s a little unsettling that they’ll actually do so arbitrarily without a clear TOS violation. It might be time I move everything to Sourcehut and treat GitHub as a mirror…

                                          1. 24

                                            It might be time I move everything to Sourcehut…

                                            The Sourcehut guy has always seemed a little unstable to me (didn’t he get banned from this site, in fact?) So, why would I trust him any more than I trust GitHub?

                                            1. 33

                                              I banned him and I would not call him unstable. Not just because that kind of insult is inappropriate here, but because it obviously doesn’t apply. He writes inflammatory hyperbole that’s not a good fit for this site, but he’s a skilled, accomplished professional who looks like he’s seeing a lot of success in his life.

                                              1. 11

                                                I didn’t mean to insult him. Maybe “erratic” would have been a better word without any mental health connotations (which I absolutely didn’t intend)? Poor word choice on my part, I’m sorry for that.

                                                …but he’s a skilled, accomplished professional who looks like he’s seeing a lot of success in his life.

                                                Sure, same goes for the GitHub guys. A person who can’t tone it down enough to keep a Lobsters account just isn’t someone I feel I can trust to host my code, particularly given that he’s in charge of the whole operation. Obviously everyone is free to decide who to trust and for what reasons.

                                                1. 8

                                                  A person who can’t tone it down enough to keep a Lobsters account just isn’t someone I feel I can trust to host my code

                                                  Bear in mind, Linus Torvalds would also probably have been banned from here multiple times in the past.

                                                  I’d be perfectly happy to trust someone that volatile a lot (and I guess I do, running Linux since 1996 :) ). But I would be careful which groups and forums I invited them to :)

                                                  1. 2

                                                    …I guess I do, running Linux since 1996

                                                    Very different, at least to me. If Linux was a service, control would have been taken away from Linus a long time ago (I mean, as it is they made him step back for awhile to work on his issues). But it’s not, it’s just code that other people then build into something, often applying patches in the process. If Linus had a meltdown there is already sufficient infrastructure in place that the vast majority of us wouldn’t even notice.

                                                    I wouldn’t trust a code hosting service Linus ran by himself either.

                                                    1. 1

                                                      Nobody made Linus step back. He recognized that he had issues and took a sabbatical to deal with them himself. Are you saying you wouldn’t trust a service by a guy who has been diligently working on the same project for 30 years? Not to mention the guy who invented the base of all of the services discussed in this thread.

                                                      Why do people assume that “Bigger is better” when it comes to web services? The two most reliable services I use are Pinboard, run by an insanely opinionated and outspoken developer, and NewsBlur, who was, and may still be, a one man shop that just quietly does his own thing. In the same time as those services have been faithfully up and running, Google has shut down more services than I can count, because “It didn’t fit with their corporate vision”

                                                      It’s misguided, and harmful.

                                                      1. 1

                                                        Nobody made Linus step back.

                                                        We’ll probably never know for sure, but the subtext (well, and the text) of his announcement email sure makes it sound like his hand was forced, at least to me.

                                                        Are you saying you wouldn’t trust a service by a guy who has been diligently working on the same project for 30 years?

                                                        No, I’m saying I wouldn’t trust a service run by a guy who randomly goes off on people in totally inappropriate ways (his admission). Or, as is the case here, a guy who can’t even behave himself well enough to keep a Lobsters account.

                                                        Not to mention the guy who invented the base of all of the services discussed in this thread.

                                                        That has literally nothing to do with anything. A person can be productive or brilliant and also have other, undesirable, qualities.

                                                        Why do people assume that “Bigger is better” when it comes to web services?

                                                        I don’t, so I can’t answer that.

                                                        Google has shut down more services than I can count…

                                                        Agree with you there! I don’t trust Google for anything but search (I don’t even use Gmail), because that’s the one thing I don’t think they’ll ever kill (or break). I don’t think GitHub is going anywhere either, the worst case scenario is that Microsoft sells it.

                                                        It’s misguided, and harmful.

                                                        If there was a person who had the views you seem to ascribe to me, then I might agree!

                                              2. 30

                                                That’s unfair to Drew. He’s passionate, and rude, and opinionated, and submissions here from his site generally stirred up giant flamewars. But I do believe he’s got what it takes to keep sourcehut running.

                                                1. 18

                                                  GitHub will keep running, too. I’m not sure we’ve answered the question of

                                                  why would I trust him any more than I trust GitHub?

                                                  1. 8

                                                    Not only is the sourcehut software available under the AGPL, the issue trackers and such give you export and import functions to pull your data into another instance easily. The software itself is not trivial to host, but it’s not prohibitively hard either. If I needed to eject because Drew became untrustworthy, I am very comfortable that I could do that.

                                                    Even though that’s a non-zero amount of work, GitHub gives me no comparable ability. That’s a good reason to trust him more than I trust GitHub, in my opinion.

                                                    1. 3

                                                      GitHub gives me no comparable ability.

                                                      The GitHub command line client provides this functionality, as does the API. Obviously, the data formats are specific to the way GH works, but there are ways to extract most if not all of the relevant data (I use this heavily with my team to script up our findings workflow, for example).

                                                      1. 5

                                                        Interesting. Unless I’m missing something, you can’t stand up your own self-hosted instance of github, and import that, can you? The ability to stand up my own instance of the forge and import my data, to use on a self-hosted site, is what I meant by “comparable”. (That’s the angle I was coming from… if Drew won’t let me use his hosted service, I can just set up my own copy on any host I want since upstream is AGPL, then import my data from the sr.ht export since sr.ht exposes those functions.)

                                                        1. 2

                                                          GitLab supports importing to a self-hosted instance from GitHub [1], although I’m sure it’s not perfect, so it may or may not be useful. It also isn’t clear to me based on a 15 second review whether you can import from some kind of local data dump or raw GitHub API responses or if your GitHub account needs to be currently active.

                                                          [1] https://docs.gitlab.com/ee/user/project/import/github.html

                                                          1. 2

                                                            That looks much better than I thought, particularly if it turns out to work off saved data/responses. And it’s nice that Gitlab enable that for all their tiers.

                                                          2. 1

                                                            Unless I’m missing something, you can’t stand up your own self-hosted instance of github, and import that, can you?

                                                            GitHub Enterprise can be bought as a GitHub-hosted or self-hosted thing. These support (most of) the same APIs as the public GitHub, so you can run your own instance if you are willing to pay.

                                                            1. 2

                                                              It would be an interesting experiment to see whether they would sell an enterprise installation to someone whose account they forcibly closed. I was sort of assuming that if they won’t let you be a customer of their public service, they won’t sell you the private one, but that is uninformed speculation.

                                                      2. 3

                                                        Because sourcehut is open source so nothing is lost when I leave. More than that chances are if sourcehut goes a bad route there would likely be others jumping in.

                                                      3. 2

                                                        Not that you exactly claim otherwise, but Drew also makes some nice things and has created a business structure that enables at least one other developer to make some nice things.

                                                        Quite apart from that, though, and similarly quite apart from whether he has what it takes to keep sourcehut running, he’s given me an out so that I don’t, strictly speaking, need him to. He’s released the software that runs the forge under the AGPL, here. And it exposes ways for me to export the hosted stuff and import it into a self-hosted instance.

                                                        So regardless of whether I trust Drew personally, he’s made it so I don’t need to for this purpose.

                                                        If Drew got angry and decided I couldn’t be his customer anymore, I could stand up my own instance or pay someone to do that for me and import my data. My repos wouldn’t be down at all, my tickets, docs, etc. would be down for a day or so, and my mailing lists might see a bit more disruption than that. If github decided that I shouldn’t be their customer anymore, I’d have my repos. For the rest, I’d kind of be out of luck. (I think this last paragraph is more responsive to @glesica ‘s comment than the one I’m replying to, and I’m too lazy to split it to another reply.)

                                                      4. 17

                                                        Because “more than I trust Microsoft” is a damn low bar.

                                                        1. 7

                                                          It’s like a little devil hovering over my right shoulder, and a slightly less predictable devil hovering over the other.

                                                      5. 6

                                                        From other options there’s also fediverse approach with Gitea, and p2p approach will be available soon with Radicle.

                                                        1. 11

                                                          It might be time I move everything to Sourcehut and treat GitHub as a mirror…

                                                          That time was years ago, but hey, better late than never.

                                                          1. 5

                                                            Consider hosting your own, instead. I published a blog post with a list of defunct code hosting sites which I update occasionally. Maybe that list is a good reminder. Remember, it’s not just code that goes away with such sites, it’s also issue queues and in some cases, wikis and mailing lists too.

                                                            1. 4

                                                              Are you also start hosting a list of defunct private websites that used to host Git repos that are gone forever and where the disappearence came completely unexpected? I would trust Github more with staying online since that’s their job than a developer running a Gitweb on some VPS with some domain name that requires regular payment to stay online.

                                                              Kinda like I registered callcc.org after it lapsed to make sure the links to the CHICKEN website don’t break and it doesn’t get domain-squatted and I’m redirecting to the official website these days.

                                                              1. 1

                                                                Are you also start hosting a list of defunct private websites that used to host Git repos that are gone forever and where the disappearence came completely unexpected?

                                                                I can’t think of anything offhand where I’ve taken a dependency that’s done that. But when I do take a dependency on something, I generally mirror the SCM repo if there is one. And I am very reluctant to take dependencies on things I can’t have the source to. Since the things I depend on generally haven’t gone away, I haven’t bothered to publish my mirrors, but I would if the license permits it.

                                                                1. 3

                                                                  But when I do take a dependency on something, I generally mirror the SCM repo if there is one.

                                                                  I learned that the hard way when Rubyforge went down, a few employers ago. We weren’t that active in the Ruby community anymore, so we missed the notice. When the site went away and I had to do some small maintenance tasks on a legacy project, all the third party svn subtrees from Rubyforge were no longer working (and, more painfully, another project of ours was completely gone too). Note that Rubyforge was huge in the Ruby community back in the day.

                                                                2. 1

                                                                  I would trust Github more with staying online since that’s their job than a developer running a Gitweb on some VPS with some domain name that requires regular payment to stay online.

                                                                  Like I said, history has shown these hosting sites are not as trustworthy as people like to believe they are. The GitHub company can get sold to an untrustworthy partner (har har, like that’d ever happen… oh wait) or go out of business (what if MS decides to sell the company to, I dunno, Oracle or something because it’s not making a profit?), or there might be some other new VCS that comes out that completely blows git out of the water. I’m sure nobody saw coming what happened to Bitbucket - it started out as a Mercurial hosting site, then started offering git and finally dropped Mercurial after Atlassian took over. Its founders probably never would have let that happen if it were still in their power.

                                                                  From my own perspective, I’ve personally ran into at least five hosting sites who were hosting projects I started or heavily contributed to that are no longer available now (Rubyforge, Dutch govt OSOSS’ uitwisselplatform, Berlios, Bitbucket and Google Code). And then there’s Sourceforge which at least still hosts some of my defunct projects, but had for a while been injecting malware into downloads. If I or my employers (as the case may be) had hosted our own projects from the start, this pain would’ve been completely avoided. These are projects in which I had a stake, and it was in my interest to not let them die.

                                                                  Now, having said that, I agree that from a third party perspective (someone who is using the hosted code) that’s different. I understand your point saying you don’t want to rely on some random developer’s VPS being up, and neither would I. But then, people change repositories on code hosting sites all the time, too. They move to other hosting sites, or rename repositories etc. Links rot and die, which is unfortunate and something we all have to live with.

                                                                  Case in point:

                                                                  Kinda like I registered callcc.org after it lapsed to make sure the links to the CHICKEN website don’t break and it doesn’t get domain-squatted and I’m redirecting to the official website these days.

                                                                  Thanks for doing that. AFAIK this domain was never communicated as being official, but I might be wrong.

                                                            2. 8

                                                              I don’t know what the GitHub rationale was, but the ‘limitation of liability’ bit in most open source licenses only goes so far. If I intentionally introduce malicious behaviour into one of my open source projects, knowing that it would damage downstream consumers, then I’d probably be liable under the Computer Misuse Act in the UK and similar legislation elsewhere. GitHub’s T&C’s don’t explicitly prohibit using their service for criminal purposes but that’s normally implicit: if GitHub didn’t act then they might end up being liable as an accessory (at least as an accessory after the fact). Their distribution channel (NPM) is being used by a malicious actor to attack other users.

                                                              It’s normally difficult to prove malicious intent in this kind of thing (incompetence and malice look similar) but it seems pretty clear here from the author’s own statements.

                                                              1. 12

                                                                I don’t know what the GitHub rationale was, but the ‘limitation of liability’ bit in most open source licenses only goes so far.

                                                                This is disturbing. Software is provided as is, with no liability whatsoever, but the author should still be liable for what happens when other people use it, because it broke things? What if the author decided to completely change the library’s API, or recycle it to just print squares of color, because they liked the name?

                                                                If find what the author did pretty stupid, but frankly, suggesting it falls into criminal behavior call for some stepping back and put things in perspective.

                                                                1. 8

                                                                  There is a difference, and it’s not subtle at all, between making a possibly unwanted change in software that is provided without any warranty, and deliberately making a crippling change with the express intent of breaking other people’s applications.

                                                                  To put it another way: if you accidentally commit an integer overflow bug that causes batteries to blow up, that is, presumably, just bad engineering. But if you deliberately commit a clever hack that causes people’s batteries to blow up, with the express intent of getting people injured, or at least destroying their phones, I think it makes a little sense to not put it under “well, it did say no warranty of any kind on the box, didn’t it?”.

                                                                  Obviously, this didn’t kill anyone, so I’m obviously not thinking it ought to be treated as murder. But “no warranty” is not a license to do anything.

                                                                  It’s not like software is being given special treatment here, it’s how warranties work everywhere. If you sell boats with two years’ servicing warranty and they break down after three years, that’s one thing, but if you fit them with bombs that go off after two years and one day, with the express intent of killing anyone on them, that still falls under “murder”, not “what happens after two years isn’t our problem, it says so on the purchase contract”.

                                                                  (Edit: obviously IANAL and this is not legal advice, either, I’m only parroting second-hand, non-lawyer advice about how insurance works for some high-stakes software projects)

                                                                  1. 5

                                                                    I guess that makes sense, when you put it that way :)

                                                                  2. 3

                                                                    I am not a lawyer, this is not legal advice:

                                                                    My understanding is that it comes down to intent. If I upload a buggy piece of crap to GitHub with an open source license, and you use it, then it sucks to be you. If I upload something to GitHub, wait for you to deploy it and then intentionally introduce a vulnerability or other malicious behaviour in it then legally dubious. Normally it’s very difficult to prove intent. If I submit a patch to the Linux kernel that introduces a vulnerability, if you wanted to prosecute me then you’d have to prove that I did so knowing that the bug was there and with the intent to cause harm. That’s very difficult to do in the general case (the NSA null-pointer dereference bugs are a great case in point here: people suspect that the NSA knew about that vulnerability class and introduced it deliberately, but no one can prove it and there’s enough reasonable doubt that it would never stick in court unless there was some corroborating evidence - it could easily have been accidental). If, before I submit the patch, I post publicly about how I am going to intentionally break things for the people using my code and then I push a new version out to public repositories then it’s likely to be easy to prove malicious intent. The author of these packages did exactly that: posted saying that he was going to break things for people if they didn’t pay him and then, when they didn’t pay him, broke things. That may (again, not a lawyer) count as blackmail, as well as computer misuse.

                                                                    1. 3
                                                                      1. Code license != Github TOS.
                                                                      2. Liability could only be disclaimed to the extent permitted by law. You cannot put a sign “free food, no liability whatsoever” and then put poison inside and expect that disclaimer to save you from prison. E.g., GPL states “THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.”
                                                                  3. 7

                                                                    I think until they make a statement about it, nobody knows but them. But my assumption is that this happened on a weekend, and whoever was on call figured that the easiest thing to do to minimize disruption till Monday was to suspend the account and hard revert the content until more people could be brought in. I’m also assuming suspending the account just automatically says that you violated the ToS.

                                                                    1. 3

                                                                      I could imagine that somebody identified this as a possible account hack and thus locked it.

                                                                      1. 2

                                                                        They didn’t, they suspended his account so he can’t log in. You are still free to troll him on GitHub without any recourse whatsoever.

                                                                      1. 4

                                                                        I thought Blockchain stuff was off topic to lobsters?

                                                                        1. 2

                                                                          Oh, I had no idea. My bad!

                                                                          1. 4

                                                                            It’s a good article, I’m just surprised that it stayed up, in the past they remove any cryptocurrency related posts (I don’t care either way).

                                                                            1. 18

                                                                              It’s a decent writeup of implementing stuff and the tradeoffs of the large-scale design of the systems rather than being promotional or about businesses. I thought it was worth an experiment to leave it up. But the comments here are overwhelmingly not related to implementation; mostly we’re talking about marketing, scams, Signal’s cryptocurrency integration, etc. So this article is not producing normal, relevant discussions for the site and future links at a similar distance from implentation will get removed.

                                                                              1. 7

                                                                                Sad to hear that. I wouldn’t have read the article without your comment about its quality, but now that I did I wouldn’t want to see this content gone from lobsters. Edit: It’s the first article for me that actually dives deep into what all this means and by doing so uncovers the bad stuff simply by showing how it works.

                                                                                1. 5

                                                                                  There’s a lot of really wonderful writing on the web that’s just a little too far off-topic to prompt the kind of creative, collaborative discussion about programming that I think is the hard-to-find value of the site.

                                                                                  The site’s core topic is the design and implementation of computer programs. Then lots of things that are a small step away in different directions: how to use various programming tools like editors and debuggers, useful libraries, broad views of strategies, sharing the things we’ve made, retrospectives, long-term trends in software development. Also larger steps away like how to collaborate on a project, how software licensing works, vulnerability news, fun community-building posts like the weekly + weekend threads. Sometimes this steps too far, into things that are clearly off-topic like entrepreneurship, stories of getting and having jobs, rage at poor customer support or business practices (usually at one or more companies in the tech industry), electoral politics. In the middle there’s a bunch of fuzzy borders and guessing where discussion is likely to go.

                                                                                  So while I also got a lot out of this article and thought it might work out, the discussion here constantly vectored away from the core of the site. I’m heartened that it didn’t turn into any fights even as it touched on contentious areas that we’re often strongly divided on, but if this is where broader pieces about cryptocurrency lead, I don’t think I want to keep rolling the dice on them when we’re not getting much discussion that’s unambiguously in the site’s central focus.

                                                                                  1. 5

                                                                                    little too far off-topic

                                                                                    I think this article was on-topic for showing how you actually develop a program in this crypto-system and what hurdles you’ll have to overcome. Also giving you an impression of whether this “framework” may fit your requirements or not.

                                                                                    discussion here constantly vectored away from the core of the site

                                                                                    Yes and no ? There was a lot of general “crypto” discussion, and I certainly don’t think we need many discussions about crypto. On the other side: We already had many hot discussions that are ultimately a question of opinion and belief in certain things (FOSS maintainer, performance and feature obligations for example). And I do think they’re on-topic as long as they’re civilized and not a repetition of the same arguments over and over. There were also some discussions about the technical possibility to overcome the limitations shown in the article.

                                                                                    And if there is a community where I’m actually interested to hear about their thoughts on how much of an actual win this whole crypto dance/industry is, then it’s this one. As I’m more certain to get actual technical details, rather than outsiders with varying money interests.

                                                                                    Edit: But just to clarify, I don’t oppose removing the next one, I just wanted to throw in my 2 cents of why I think at least this post is actually worth to keep here and maybe some others like this too.

                                                                                    1. 4

                                                                                      FWIW I saw this post/conversation as a sort of magnet or pressure release for this topic here. Lots of upvotes and comments, I think that says something. No biggie tho

                                                                                      1. 3

                                                                                        If engagement were a good fitness function we wouldn’t need moderation

                                                                                  2. 6

                                                                                    Thank you for taking on the ambiguous and onerous task of moderation. People are complicated, ever changing and it’s impossible to please. It ain’t easy!

                                                                                  3. 2

                                                                                    This post should be removed.

                                                                              1. 37

                                                                                A company “bought” Audacity and added spyware. The same company also did it to MuseScore.

                                                                                You know, it really was and still is a stretch to describe basic, opt-in telemetry as spyware just because they made the unfortunate decision to use Google Analytics as a backend.

                                                                                1. 18

                                                                                  Also, from what I heard they are doing decent work, actually paying maintainers to work on the software. You know, the exact thing that OP is complaining about not happening.

                                                                                  1. 5

                                                                                    please explain how Google Analytics isn’t spyware? it is software that monitors user behavior and reports it to a 3rd party, all typically without user consent.

                                                                                    1. 19

                                                                                      Audacity/GA would be spyware if it was monitoring usage of other things the user was doing on their computer. Using the term to describe the app recording usage of itself is hyperbole.

                                                                                      1. 5

                                                                                        If my business was audio engineering, having a tool that started reported on my usage of it would be problematic. I would immediately start looking for alternatives. Why should I have to look through the code to find out exactly what it’s logging? File names? My use of licensed plugins? The inference that the lead singer needs pitch correction on every single track, or that we brought in a pro “backup” singer who is actually 85% of the lead on the final mix?

                                                                                        When I am editing my family’s amateur instrumental work, I think I can reasonably feel equally peeved at having my sound editor report back to base.

                                                                                        Calling it spyware is not necessarily hyperbole.

                                                                                        1. 5

                                                                                          Fortunately the scenario you described doesn’t exist since the telemetry is opt-in.

                                                                                      2. 18

                                                                                        all typically without user consent

                                                                                        Except here it is opt-in, as pekkavaa said.

                                                                                        1. 2

                                                                                          thanks, i missed that.

                                                                                          I was curious what kind of consent was involved, and honestly it’s better than I expected. Based on the issue linked in the OP it seems Audacity now displays a dialog asking users to help “improve audacity” by allowing them to collect “anonymous” usage data. They don’t seem to mention that it also reports this to Google.

                                                                                        2. 8

                                                                                          Counting how many people clicked the big red button and bought products, or how many users have a 4K monitor, or how fast the page loads technically involves monitoring.. but it’s not really the same as what you would typically imagine when you hear the word “spying” is it?

                                                                                          It’s rather silly to equate performance metrics, usability studies and marketing analytics to a secret agent carefully reading all your messages.

                                                                                      1. 1

                                                                                        Some useful context on RCU from enterprisey in #lobsters.

                                                                                        1. 8

                                                                                          (Are you wondering where the constant 0x517cc1b727220a95 comes from? 0xffff_ffff_ffff_ffff / 0x517c_c1b7_2722_0a95 = π.)

                                                                                          Why is this magic number a good choice? Is it something to do with pi not having patterns in its digits? But then why use 1/pi vs pi, or some other irrational?

                                                                                          1. 28

                                                                                            It’s iffy, but I’m not removing this article because it’s about comparing the existing technical trade-offs to those of new/proposed systems clumped under “web3” rather than skipping over them to talk about business, scams, and other stuff that’s not topical here. Those two areas are so interdependent that I’m at a loss to offer a bright line dividing them; it’s not even clear which is driving which. Both HN and Reddit have large, broad conversations responding to this article, though, so that conversation is available if you want it. Let’s try to keep Lobsters focused on the technical discussion. (If you can draw a line between the two areas to define topicality in a way that’s reasonably predictable to boosters and skeptics alike, my inbox is open; please also note which religion you would like me to nominate you for sainthood in.)

                                                                                            Also, I’m applying the merkle-trees (nee cryptocurrency) tag. It is our second-most filtered-out tag: currently 293 users, after meta at 1,367.

                                                                                            1. 23

                                                                                              I didn’t see this until now.

                                                                                              Let’s try to keep Lobsters focused on the technical discussion.

                                                                                              That’s kind of difficult. What even is a system? And, our political criticism of it is founded in technical concerns (efficiency, scarcity, externalities).

                                                                                              But I’ll take a break. I hope people don’t mistake that break as assent of web3.

                                                                                              As frightening as it is to focus on the technical details of something like this, I do see the value in the strict focus Lobsters has. I’ll turn my computer off and go to bed. Thank you.

                                                                                              1. 2

                                                                                                I’m applying the merkle-trees (nee cryptocurrency) tag. It is our second-most filtered-out tag

                                                                                                People who filter out cryptocurrency posts, i.e. people who don’t like cryptocurrencies, will automatically filter out this post, and miss out on a technical analysis that provides a solid argument against it. I think it would be better to give them a chance to see this post.

                                                                                                1. 17

                                                                                                  People who filter out cryptocurrency posts probably don’t want to read a technical analysis about it at all, speaking as one of them

                                                                                              1. 22

                                                                                                I’m unsure if Peter has the spare time, or if it’s just the bare minimum to keep the site up and not go up in troll-flames. There was a we need a new moderator-post some time ago but as far as I know there are no nee moderators.

                                                                                                It might not be unwillingness, but rather a lack of time. Pure speculation of course, but that’s the first thing that comes to my mind.

                                                                                                1. 16

                                                                                                  We had a pretty responsive moderator back when @alynpost was around, but that is no longer the case. We had a remarkably interesting precedent of community-advised autocracy under @jcs and later @pushcx–that’s probably the most interesting/endearing part of Lobsters to me, and one that I think has mostly passed (much to my dismay). According to the mod log, we have been operating with only one mod for at least a few months.

                                                                                                  @pushcx has made oblique references (if my reading was correct) to some non-Lobsters circumstances drawing attention away (which is quite fine, since there is in fact a life outside the red site). Regrettably, the structure of governance for Lobsters is not robust when that happens.

                                                                                                  I have various critiques on how we get here, but I think it is sufficient to state that: Lobsters functions best with a very involved community, people focusing on tech instead of other things, and processes/mods engaged on a daily basis; but, I do not believe that we are currently in that operating regime.

                                                                                                  Sorry to all of the folks who’ve put such effort into writing up good tagging proposals. :(

                                                                                                  1. 17

                                                                                                    :(

                                                                                                    1. 9

                                                                                                      <3 we’re doing our best, and I do believe the site will be around for many years to come

                                                                                                    2. 16

                                                                                                      Yeah, I agree that the site does need attention from mods to be its best, and there isn’t as much of that to go around lately. With that said, I do think very highly of Lobste.rs users, and I think all y’all should give yourselves credit. The quality of discussions has largely remained high even during periods when mods have been busy elsewhere, and I think that’s the result of everyone’s hard work, not just the few of us with authority.

                                                                                                      My overall philosophy on things like this (but please understand that this is my personal view, not the view of the site) is that top-down moderation can only ever scale so far - but that’s okay, because when everyone in the community is committed to making it the best it can be, and feels empowered to gently guide things back on-track, that scales to any size.

                                                                                                      1. 3

                                                                                                        I can see how you’d get this impression from the mod log, but I’m certainly not alone. The mod channel on IRC also includes the chat mods (@355e3b and @aleph). We’re in different time zones on different schedules, so there’s pretty much always a running discussion as we talk through issues.

                                                                                                    1. 5

                                                                                                      I’ve added this tag, but not yet backfilled it on existing stories. I left a longer comment on the other thread with some more info.

                                                                                                      1. 1

                                                                                                        Thank you!

                                                                                                      1. 38

                                                                                                        On this specific tag - it’s mostly bad timing, sorry. I’m currently on my first (much-needed) vacation since the start of the pandemic, hiking with limited internet connectivity. I’ve added nix but backfilling (more on that below) will have to wait until I’m home next week.

                                                                                                        With tags generally, it’s mostly wanting to be certain that adding it will bring significant value. Each one adds complexity to story submission, so if it’s not likely to get used often (both in tagging and filtering) it’s a net negative. A while ago I added some text about this to /about:

                                                                                                        Explain the scope, list existing stories that should have been tagged, make a case for why people would want to specifically filter it out, and justify the increased complexity for submitters and mods.

                                                                                                        Most tag suggestions don’t include these things, or only get a dozen or so votes and tepid comments. Any suggestions on improving this wording?

                                                                                                        There’s also a practical inconvenience in that backfilling a tag on existing stories is a series of manual tasks. Basically: searching for stories that should be tagged, pulling a list of the short IDs into a rails console, adding the tag to them (without sending the automated “your story has been edited” note), and then adding a single note about the bulk edit to the modlog.

                                                                                                        1. 5

                                                                                                          Re: backfilling, a new tag suggestion already requires a number of recent posts that would justify that tag. These can obviously be backfilled as per above by a sysop. If there are others, let users suggest tags for the “long tail” of previous submissions.

                                                                                                        1. 19

                                                                                                          Is it possible to force the previous theme in the profile? On my desktop I have no problems, because I use my own Stylus override anyway, but on mobile my eyes hurt from this black/white contrast. I actually prefer to have a dark theme set up globally, but dark does’t mean it’s pitch black ;)

                                                                                                          1. 9

                                                                                                            A manual setting was out of scope this time, but it could happen next if there is demand and a volunteer.

                                                                                                            1. 2

                                                                                                              I can present to you how I solved it in my own project (similar in scope to lobste.rs) at https://littr.me. To see it in action, you click the “Invert colours” link in the site’s footer.

                                                                                                            1. 12

                                                                                                              As discussed in the announcement, your browser is selecting dark mode, probably based on your OS setting. I didn’t attempt to be exhaustive (we see a lot of odd user-agent headers) but you’re probably covered. I know there are extensions like Stylish for applying custom per-site CSS, perhaps there’s also one available for a per-site toggle.

                                                                                                              As discussed in the comments on the announcement, an on-site setting would require that someone volunteer to write the feature. If you’re new to the codebase, maybe drop by the chat room, there’s usually someone familiar with it during US daytime that could help with questions.

                                                                                                                1. 3

                                                                                                                  After undertaking a personal journey to meet CSS where its heart is, I have deployed your PR. Thanks for implementing this!

                                                                                                                  1. 2

                                                                                                                    Thanks for volunteering! Couple smallish comments and hopefully we can add this user setting pretty quick here.

                                                                                                                  2. 0

                                                                                                                    The light mode UI on my phone is simply an atrocity. The dark mode lobsters was hard to swallow, but it’s not bad, though I do prefer the light theme. Thanks, @danielrheath!

                                                                                                                  1. 2

                                                                                                                    Submitted with an edited title, after seeing @pushcx’s many modlogs stating “toning down clickbait title”.

                                                                                                                    1. 2

                                                                                                                      Thank you, good call.

                                                                                                                    1. 24

                                                                                                                      I’m sympathetic to the goal of making reasoning about software defects more insightful to management, but I feel that ‘technical debt’ as a concept is very problematic. Software defects don’t behave in any way like debt.

                                                                                                                      Debt has a predictable cost. Software defects can have zero costs for decades, until a single small error or design oversight creates millions in liabilities.

                                                                                                                      Debt can be balanced against assets. ‘Good’ software (if it exists!) doesn’t cancel out ‘Bad’ software; in fact, it often amplifies the effects of bad software. Faulty retry logic on top of a great TCP/IP stack can turn into a very damaging DoS attack.

                                                                                                                      Additive metrics like microdefects or bugs per line of code might be useful for internal QA processes, but especially when talking to people with a financial background, I’d avoid them, and words like ‘debt’, like the plague. They need to understand software used by their organization as a collection of potential liabilities.

                                                                                                                      1. 11

                                                                                                                        Debt has a predictable cost. Software defects can have zero costs for decades, until a single small error or design oversight creates millions in liabilities.

                                                                                                                        I think this you’ve nailed the key flaw with the “technical debt” metaphor here. It strongly supports this “microdefect” concept, explicitly by analogy to microCOVID, which the piece doesn’t mention is named for micromort. The analogy works really well to your point: these issues are very low cost and then sudden, potentially catastrophic failure. Maybe “microcrash” or “microoutage” would be a clearer term; I’ve seen “defect” used for pretty harmless issues like UI typos.

                                                                                                                        The piece is a bit confusing by relying on the phrase ‘technical debt’ while trying to supplant it, it’d be stronger if it only used it once or twice to argue its limitations.

                                                                                                                        We’ve seen papers on large-scale analyses of bugfixes on GitHub. Feels like that route of large-scale analysis could provide some empirical justification for assessing values of different microdefects.

                                                                                                                        1. 1

                                                                                                                          I’m very surprised by the microcovid.org website not mentioning their inspiration from the micromort.

                                                                                                                          1. 1

                                                                                                                            It’s quite possible they invented the term “microCOVID” independently. “micro-” is a well-known prefix in science.

                                                                                                                          2. 1

                                                                                                                            One thing I think focusing on defects fails to capture is the way “tech debt” can slow down development,even if it’s not actually resulting in more defects. If a developer wastes a few days flailing because the didn’t understand something crucial about a system e.g. because it was undocumented, then that’s a cost even if it doesn’t result in them shipping bugs.

                                                                                                                            Tangentially relatedly, the defect model also implicitly assumes a particular behavior of the system is either a bug or not a bug. Often things are either subjective or at least a question of degree; performance problems often fall into this category, as do UX issues. But I think things which cause maintenance problems (lack of docs, code that is structured in a way that is hard to reason about, etc) often work similarly, even if they don’t directly manifest in the runtime behavior of the system.

                                                                                                                            1. 1

                                                                                                                              Microcovids and micromorts at least work out in the aggregate; the catastrophic failure happens to the individual, i.e. there’s no joy in knowing the chance of death is one in a million if you happen to be that fatality.

                                                                                                                              Knowing the number of code defects might give us a handle on the likelihood of one having an impact, but not on the size of its impact.

                                                                                                                            2. 3

                                                                                                                              Actually, upon re-reading, it seems the author defines technical debt purely in terms of code beautification. In that case the additive logic probably holds up well enough. But since beautiful code isn’t a customer-visible ‘defect’, I don’t understand how monetary value could be attached to it.

                                                                                                                              1. 3

                                                                                                                                I usually see “tech debt” used to describe following the “no design” line on https://www.sandimetz.com/s/012-designStaminaGraph.gif past the crossing point. The idea is that the longer you keep on this part of the curve, the harder it becomes to create or implement any design, and the ability to maintain the code slows.

                                                                                                                                1. 1

                                                                                                                                  I think this is the key:

                                                                                                                                  For example, your code might violate naming conventions. This makes the code slightly harder to read and understand which increases the risk to introduce bugs or miss them during a code review.

                                                                                                                                  Tech debt so often leads to defects, they become interchangeable.

                                                                                                                                  1. 1

                                                                                                                                    To me, this sounds like a case of the streetlight effect. Violated naming conventions are a lot easier to find than actual defects, so we pretend fixing one helps with the other.

                                                                                                                                2. 3

                                                                                                                                  I think it’s even simpler than that: All software is a liability. The more you have of it and the more critical it is to your business, the bigger the liability. As you say, it might be many years before a catastrophic error occurs that causes actual monetary damage, but a sensible management should have amortized that cost over all the preceding years.

                                                                                                                                  1. 1

                                                                                                                                    I think it was Dijkstra who said something like “If you want to count lines of code, at least put them on the right side of the balance sheet.”

                                                                                                                                  2. 2

                                                                                                                                    Debt has a predictable cost

                                                                                                                                    Only within certain bounds. Interest rates fluctuate and the interest rate that you can actually get on any given loan depends on the amount of debt that you’re already carrying. That feels like quite a good analogy for technical debt:

                                                                                                                                    • It has a certain cost now.
                                                                                                                                    • That cost may unexpectedly jump to a significantly higher cost as a result of factors outside your control.
                                                                                                                                    • The more of it you have, the more expensive the next bit is.
                                                                                                                                    1. 1

                                                                                                                                      especially when talking to people with a financial background, I’d avoid them, and words like ‘debt’, like the plague

                                                                                                                                      Interesting because Ward Cunningham invented the term when he worked as a consultant for people with a financial background to explain why code needs to be cleaned up. He explicitly chose a term they knew.

                                                                                                                                      1. 1

                                                                                                                                        And he didn’t choose very wisely. Or maybe it worked at the time if it got people to listen to him.

                                                                                                                                    1. 5

                                                                                                                                      This feels like it’s in the neighborhood of dataflow programming (sorry, I don’t have a nice intro link handy). The biggest two differences I see are that the core records in dataflow are maps rather than tuples, and dataflow is oriented towards longer-lived jobs distributed across multiple jobs rather than multiple processes/threads with shared memory.

                                                                                                                                      1. 3

                                                                                                                                        It’s very much related to dataflow! Tagged datums moving through a static or dynamic network of “processors” pretty much equates to multiple listeners taking and giving back to the tuple space as needed. You can trivially encode a dataflow program as a tuple space program, and the “shape” of the program through producer/consumer semantics.

                                                                                                                                        1. 2

                                                                                                                                          Ah, thanks, I missed it.

                                                                                                                                        1. 18

                                                                                                                                          This is a great example to try to explain a mod practice because this post is right at the line for topicality, and really a little over the line into off-topic. Lobsters isn’t customer support for popular services, and is not the torch and pitchfork outlet. A post from the person who designed this system would be much better. But this link most likely will just prompt an thoughtful discussion about a small security design issue (that’s novel, at least to me and comments so far) and seems very unlikely to turn into a flamefest or brigade mob, so I’m OK leaving it.

                                                                                                                                          1. 3

                                                                                                                                            Thanks for pointing this out! Bit of context: I was myself very surprised to learn of this feature, as I had never heard of it before. There was a mysterious issue with a colleague of mine, who said he could log-in using his phone but not with his desktop machine on a Gmail account. The phone had the password stored in its keychain, and when unmasking the password field we saw it clearly: it worked for signing in. Typing it over then resulted in an error on the desktop. We were baffled! Could not find a better source of it than this discussion, but wanted to share the “thing” here on Lobsters.