1. 5

    Do the chef developers have no moral code or a different moral code?

    1. 14

      The other developers? Undefined.

      Chef the company? Pretty clear.

      1. 3

        The developer also stated “It’s not my place to tell somewhere where their moral compass should point”, so I suppose he’s merely asking for having some moral code (and, I suspect, ideally one similar to his own), with no statement made about the chef developers.

        1. 3

          This is peak tone-deaf pedantics

          1. 1

            Explain this tone please, I can’t seem to hear it either.

        1. 3

          Why not introduce something that prevents it from running in conditions that are likely met when the system/config is an ICE thing?

          1. 4

            I think the easiest path would be to adapt what Mozilla did with the MPL/GPL/LGPL tri-license to explicitly deny certain groups.

            Copyright 2019, Yoyodyne LLC. All rights reserved.

            Use of this software by or on behalf of the following parties is prohibited:

            • The United States Department of Homeland Security (…)

            For all other parties, this file is licensed under the GPLv2. (insert license)

            Any prior art here to look at?

            1. 20

              It ceases to be “open source”, as it violates clause 5 of the Open Source Definition - no discrimination against persons or groups.

              If such restrictions became commonplace, the shared commons that we’ve all come to enjoy would be replaced by a balkanised set of microlicenses, and you would be forced to check that your intended use did not run against any pet cause of any author, and recheck this every time any package in the transitive closure of your entire stack updated itself.

              The fact that we have this shared commons of high-quality code is nothing short of a miracle, built by people who created intellectual plenty by giving what they could, and getting a lot in return. I don’t have to pay thousands of dollars for industrial-grade compilers, or development tools, or for the ability to browse the WWW. The model is facing some tough times at the moment (e.g., cloud value capture), but it’s worth remembering what things were like before we got here, and what we might give up if we make well-intentioned but ill-considered moves.

              1. 4

                by a balkanised set of microlicenses, and you would be forced to check that your intended use did not run against any pet cause of any author, and recheck this every time any package in the transitive closure of your entire stack updated itself.

                I have to do all kinds of checks to trust and integrate open-source code. Businesses are also investing in license management to do that kind of thing. Just another thing to glance at before I decide what to use. Worst case, I’ll miss out on a particular component whose owner didn’t want me to use. (shrugs)

                Still be plenty of ordinarily-licensed software out there old and new with probably little effect from these new licenses. If there’s a big effect, that could be interesting since some parties (esp License Zero) are making new ones to address actual problems in existing ones that undermine existence of and/or continuing development of software. It could go in many directions with some really useful.

              2. 6

                Eventually, the prior art might use the phrase “eminent domain.”

                Alternatively, they’ll just pirate the software for “national security” like they’ve done before. They could even classify what they’re doing so it couldn’t go to trial.

                1. 3

                  This is the sad thing, the best “neutral” act in any of these situations will amount to nothing but a gesture. It’s horrible to feel powerless in being used for what you see as evil, and the basic “I quit” gesture is about the best it gets for “civil” reactions.

                  1. 1

                    Ehh, I don’t know. I see where you’re coming from with that. I’m just not going to adopt that mindset if I’m literally giving code out to the world to be used for any purpose. Of course, people are going to use it for purposes I don’t like. If I wanted to prevent it, I’d make it proprietary, shared-source freeware with restrictions on usage, esp centered on avoiding harm.

                    To me, it looks like another situation where their goals don’t line up with the tools (esp licenses/practices) they use to execute them. That might be fixable if they make them consistent. If it can’t be fixed, they’re just taking things way too personally. One must teach themselves not to do that given how the world works or they might go crazy or just get very depressed.

                    In security/privacy, we know our tools (esp encryption) will protect the most horrible crimes you can think about on top of many, many, many more good people and things. I’m not advocating weakened security for the latter because some people and groups are human garbage. Detach myself even if it irritates me here and there. This other company probably should, too, to focus on maximizing good they can do. People should be fighting in political sphere to deal with ICE, etc. Takes different techniques.

                2. 2

                  Lerna added a clause banning usage by ICE collaborators. The change was reverted the following day.

                3. 2

                  If hostname == “ice” go boom();

                  Because that can’t be trivially patched out? How much do you need to know about the ICE config to write such a test to begin with?

                  1. 2

                    The hope is that they execute it before they notice it’s there.

                    1. 1

                      Make it in such a way that you’d have to rewrite core functionality to patch it out? I hope lobste.rs knows that my suggestion isn’t necessarily a great/serious one.. but then again, internets.

                  1. 2

                    LLVM will now remove stores to constant memory (since this is a contradiction) under the assumption the code in question must be dead.

                    I don’t understand why* it would detect and prune stores to constant memory instead of simply refusing to compile them.

                    This “user made a mistake (invoking undefined behaviour)” => “compiler can do what it wants” behaviour is bizarre to me, as a C and C++ outsider, and it’s interesting to see LLVM also following this mantra. Surely it will force other LLVM-based projects to take C and C++ semantics into consideration when they otherwise wouldn’t need to.

                    *Edit: Okay, I do understand why from an optimisation view, but it’s a decision that pushes responsibility onto the frontend (you have to get constness right) while simultaneously removing control (you don’t get to decide what happens if you get it wrong).

                    1. 3

                      It’s an architectural problem with compilers. The front-end sees the program at the syntax level (or a lightly processed version of it), and not the actual data flow. So the front-end can only catch most obvious violations, and not violations hidden behind indirection and conditionals.

                      The optimizer performs more in-depth analysis and performs passes that simplify/remove code to uncover more complex cases of UB. But at that point it’s unclear whether that UB came from the program, or has been created as side-effect to clean up after other transformations, simplifications and optimization passes.

                      While assignment to const is probably detectable directly, C has a lot of UB that isn’t detectable in any useful way, e.g. a + b is UB if the operation is signed and overflows. The compiler can’t warn about every use of +, but it does handle UB for every such case, and treating it as UB is critical to performance of indexing by int in loops.

                      1. 2

                        Hmm, is there really no way for it to feed this kind of information back to the front-end? Otherwise every language using LLVM would inherit UB.

                        But at that point it’s unclear whether that UB came from the program, or has been created as side-effect

                        Yikes. Should we expect that to happen often?

                        With the integer overflow example, I’d appreciate if the compiler optimised loops where the index can be shown to be within bounds (not hard with a regular for loop), and complained or added bounds checking in other cases (where the code probably needs cleaning up anyway). No UB required, I think.

                        1. 2

                          Otherwise every language using LLVM would inherit UB.

                          Yes! And for example, Rust does inherit UB from LLVM (the safe Rust tries very hard not to emit any constructs that LLVM could consider UB, but bugs around that have happened).

                          In C void foo(item *arr, int length) {for(int i=0; i < length; i++) arr[i] = 0;} cannot be proven to be in bounds, or free of integer overflow if sizeof(item)>1. And that’s a textbook loop example.

                          1. 1

                            Er, there’s no integer overflow there. The compiler had best figure out an offset that works.

                            1. 2

                              arr[i] is reading address arr + sizeof(item) * i, and the address computation can overflow.

                              https://gist.github.com/rygorous/e0f055bfb74e3d5f0af20690759de5a7

                              1. 1

                                I don’t believe kornel claimed that overflow would occur; they claim that the compiler is not able to prove that it cannot occur.

                      1. 3

                        Heh, the only program written in mod3 was cvsup, which was abandoned (in part) after no modern compiler was found to run it.

                        1. 2

                          Spin Operating System was written in Modula-3. It let code link into the kernel to run with higher performance. Edit: Also Obliq.

                          1. 2

                            I was going to say the only thing I’m aware of actually coming out of spin was lfs (log structured file system) but that was sprite. Not sure what spin gave us. :)

                            1. 2

                              It gave us hope. Hope that OS’s could be better than they are. What else do you expect of academic projects like that. :)

                        1. 4

                          This is good, and there are certainly usability and performance issues with the naive ?page=4 implementation of pagination. However, one thing I’m noticing, as more and more sites implement “proper” pagination, is that not being able to just jump to a page by editing the URL is also sort of a usability issue. Instead of <ctrl+l> <right arrow> <backspace> 20 <enter>, going to page 20 from an arbitrary page when the site uses proper pagination involves scrolling to wherever the navigation controller is, then if you’re lucky, there’s a dropdown to jump to an arbitrary page, but usually there isn’t and you end up having to slowly work your way to your desired page by hitting next/prev buttons (or maybe the site is nice enough to let you skip a few pages at a time).

                          Sure, people usually don’t know exactly what page they want to go to anyways, but sometimes they do, and sometimes they just want to explore the site. If I’m browsing, say, Reddit, I often find myself having browsed the first few pages at the top of all time in a subreddit, and would like to just be able to skip to some arbitrary page and start browsing more stuff from there, but that’s not possible, and as a result, there’s a lot of good stuff that’s not quite popular enough to end up at the top of all time which just gets lost.

                          1. 1

                            Hopefully what’s exposed is either a date or some internal DB row identifier which you can still edit. There may be gaps, or unpredictable variation in how far you go, but it should work.

                          1. 3

                            This paper touches on but doesn’t mention one of the major hurdles to Annex K. It allows setting runtime constraint callbacks in the event of overflow. memset_s(buf, 20, 0, 100) may not just return an error, it may call some user provided function. It’s a lot of complication. And cheating by not doing that part is unsafe in unknown ways.

                            1. 3

                              Graphs are not zero based, FYI.

                              1. 16

                                I saw the disclaimer at the end (“Note: this article is not about Richard Stallman. I have no comment on the recent controversies”), but in my observation a lot of this pedantic nonsense comes from rms, so it’s hard not to talk about one without also mentioning the other.

                                The question now is, can the movement grow beyond his childish pedantic stubbornness or is it too late?

                                1. 3

                                  We need someone who’s a bulldog on user rights and software freedom without being childish and, let’s be clear, stubbornly wrong about things which have nothing to do with software. We need to ensure the Overton Window can’t be dragged so far to one side by the proprietary hardware and software companies that the right to repair seems like a radical and subversive idea, and that software which doesn’t track you seems like something only criminals want.

                                  1. 2

                                    RMS has been kicked out because he lost support and protection for being what he is. If not the movement, at least the community already grew beyond RMS, to the point where even his immediate surroundings turned against him and all the shit came out.

                                    I would say there’s still a lot to do in terms of communication and elitism, and this might be an unsolvable problem intrinsic to the hacker ideologies, but at least “pedantic stuborness” won’t be the main problem anymore.

                                    1. 1

                                      The question now is, can the movement grow beyond his childish pedantic stubbornness or is it too late?

                                      How many people have you met who are as childishly pedantic as RMS? The “movement” has been in progress for the last 20-30 years, and we’ve grown well past (and in spite of) Stallman’s word policing so much that it’s become functionally irrelevant. All he had was a pulpit at this point.

                                      1. 10

                                        He’s the one that started the movement and set the tone. You see this in many communities; the guy who starts it sets the initial tone, and this attracts like-minded folks and keeps out people who don’t have/like the same kind of attitude, which creates a snowball effect.

                                        1. 6

                                          You need look no farther than any lobsters thread about FSF calling android malware or abortion jokes in glibc manual to find people insisting that these are the words which must be used.

                                          1. 3

                                            You don’t have to call the Android surveillance platform malware. A rose by any other name, however…

                                            1. 2

                                              I’ll admit that some of the biggest loudmouths in the community might be drawn to RMS’ style, but the vast majority of us don’t follow.

                                        1. 2

                                          The Go runtime is terrible and rules out Go’s applicability to a huge set of problems.

                                          1. 2

                                            Do you mean the garbage collection itself, or how it implements it?

                                            1. 3

                                              I’m referring more to Goroutines, though garbage collection imposes similar problems. Because goroutines can switch more or less randomly (at least from the programmer’s point of view) between green threads and real threads, all programs have to deal with the problems of the latter. If it were up to me I’d never use real threads and my code would be 100x simpler for it.

                                              1. 8

                                                I don’t think about threads when I’m writing Go. What are the set of problems where green threads switching to system threads is undesirable?

                                                1. 1

                                                  If a program is using just coroutines (green threads, but I’ll use the term coroutine for this) then only one coroutine is running at a time, so I can be pretty sure a sequence of instructions will be “atomic” with respect to other coroutines. With true, preemptive threading, all that goes out the window.

                                                  1. 2

                                                    I’m really confused by this exchange. One of the primary purposes of goroutines (coroutines, green threads) is to exploit the parallelism of the processor. This naturally requires synchronization for shared memory access. Are you and Drew saying you don’t care about it and don’t want to think about it?

                                                    1. 1

                                                      If I want to exploit the parallelism of the processor, I’ll run multiple instances and have them communicate (the actor model). Shared memory, in my opinion, is evil and makes reasoning about code very hard to impossible, depending upon how extensively it’s used.

                                                      1. 2

                                                        Isn’t that the whole idea behind using goroutines communicating through channels rather than threads modifying global state with mutexes? You could in theory write Go code with a bunch of goroutines modifying global state, but I don’t see why you’d do that when you dislike it so much and channels are so frictionless.

                                                        1. 1

                                                          That’s certainly an approach, unfortunately made more difficult by all the work you have to do to get those instances to behave nicely if you want to serve (say) 10k QPS on a single port.

                                                    2. 1

                                                      I think one key factor helping go here is that it leans so much on copy semantics. When you can avoid reference types in concurrent code (I mean, you usually want to do this in other languages too) you’re almost exclusively dealing with stack allocations and threads are a non-issue.

                                                      If you’re writing code that mutates something on the heap, you need to remember to put a lock around it in go, because you don’t know what else might be fiddling with it.

                                                      In python/ruby you don’t have this problem since there’s a GIL, and in rust you don’t have this problem because it won’t compile.

                                                2. 2

                                                  Can you list a few of those problems?

                                                  1. 3

                                                    The only possible response to running out of memory is a fatal panic.

                                                    1. 2

                                                      How much actual software does anything more constructive in that case? Heuristically, it’s so little that the Linux kernel (however controversially) doesn’t even give applications the chance—every allocation succeeds, with the OOM killer as a nuclear pressure relief valve.

                                                      This is not to say that it’s not a significant failing of the Go runtime, but I doubt it’s one that “rules out Go’s applicability to a huge set of problems”.

                                                      1. 4

                                                        I have found it a considerable obstacle to writing reliable servers on openbsd, where memory limits actually mean something. I don’t like it when my entire web server goes down because one request happened to be a bit large. I would like that request to fail and for other to continue. Or at the very least for some finite number of requests to fail before order is restored. I can certainly write such code in C.

                                                1. 2

                                                  Go: reading from nullable columns with the default sql library is, in my opinion, needlessly painful.

                                                  1. 3

                                                    I would agree, but since I’ve had no end of trouble related to nulls, I’m actually quite fine with just saying everything must be not null.

                                                    I wonder what the best alternative would be for scanning a null value. Leave the input value alone and don’t change it? That would allow picking sentinels like -1 for ints, instead of 0, but I feel may as well put the sentinel in the database then to avoid code scheme mismatches.

                                                    1. 2

                                                      I 100% agree that nullable db columns are an antipattern, but unfortunately for me I didn’t have a choice in this case :) I would just like the sql library to provide a mechanism to default to the Go zero value for nullable types, at least in the case of strings. You end up doing things like

                                                      var retrievedVal string
                                                      val := sql.NullString{}
                                                      // usually a BUNCH of vals
                                                      row.Scan(&val)
                                                      if val.Valid {
                                                          retrievedVal = val.String
                                                      } // usually a BUNCH of these
                                                      

                                                      And it’s just a lot of junk to do for each field, and without any sort of generic code support, writing something general would involve some ugly reflection I suspect. But to be sure, not having nullable db columns would be my preferred way to handle this.

                                                  1. 9

                                                    To pick a positive viewpoint, I thought what they built was really cool. There’s a very smalltalk machine like aspect to it. The integration between editor and runtime, and with tracing and inspection, is all very cool. Having worked on an ActivityPub server recently, something like this would have been a great aid in development, handling unexpected requests and responses.

                                                    1. 4

                                                      I’d be interested in more info about the reverted commit and the problem exposed.

                                                      1. 2

                                                        I think that’s a reasonable rational and I wonder if DoH is going to end up being OS supported at some point.

                                                        1. 4

                                                          Absolutely not! Why the hell would you want to centralise something that was decentralised since before Al Gore invented the internet?

                                                          1. 5

                                                            What? How would providing a DoH at an OS level centralize anything more than providing dns over tcp?

                                                            Edit: It occurs to me that perhaps you thought I meant dns over https (DoH) as is implemented by firefox, ie with cloudflare being the defacto resolver. What I meant was that I wonder if DoH might come to be provided as a an alternative to or super set of normal OS DNS support with some sort of resolver discovery.

                                                            1. 2

                                                              Maybe cnst is talking about CAs.

                                                              1. 1

                                                                DoH/DoT don’t inherently require CAs. The OS could offer an interface like “set IP address and expected certificate in resolv.conf”, for example. (but, IMO, concerns about CAs are silly. Everything in userspace WILL use CAs, why would an OS take a hard stance against CAs?)

                                                          2. 2

                                                            I’m still not convinced that we need DoH in the OS. What does DoH gives us that DoT doesn’t?

                                                            1. -1

                                                              What does DoH gives us that DoT doesn’t?

                                                              Transport encryption.

                                                              1. 3

                                                                What does the T in dot stand for?

                                                                1. 1

                                                                  TCP

                                                                  1. 6

                                                                    No, it’s TLS.

                                                                    1. 1

                                                                      Is it? My bad.

                                                                        1. 2

                                                                          Conventional DNS is a UDP protocol ;)

                                                                          1. 5

                                                                            Primarily UDP, but TCP if the response it too large and EDNS is not supported; also for zone transfers.

                                                            1. 1

                                                              Didn’t twitter finally disable sms posting after this? Thus technically, you’re not at risk?

                                                              1. 4

                                                                Can I use table? No results found.

                                                                1. 2

                                                                  I think some airlines try to organize things so window seats board first as well? Send in a wave of passengers with window seats at the back. Then a wave of window seats at the front, filling the aisle with loading passengers. Then a wave of aisle seats at the back, then front.

                                                                  But I think airlines found it all goes to shit because passengers are required to check their self awareness.

                                                                  1. 1

                                                                    There’s a MythBusters episode (#222) on this where they try a variety of these styles with real people and see what kinds of issues result. I forgot the results (it aired about 5 years ago when the family was interested), but it was an entertaining look at the same problem with actual humans.

                                                                    1. 2

                                                                      MythBusters episode (#222)

                                                                      https://www.youtube.com/watch?v=ss1S3-Kv6R8

                                                                      tl;dw: no assigned seats is fastest, but also the most hated; window, middle, aisle boarding is almost as fast and well liked.

                                                                  1. 2

                                                                    Great, then what the hell was all of that bullshit they did to harass Aaron Schwartz about? He was scraping a public website, too.

                                                                    1. 8

                                                                      In what sense is scraping content behind a paywall on JSTOR the same as “scraping a public website?”

                                                                      1. 3

                                                                        I agree that it’s not exactly the same thing, but I do think that it’s close enough to be interesting. IANAL but this is the Internet, so here goes…

                                                                        If you’re on MIT’s network the site is effectively public because they “authenticate” users by their IP address. JSTOR is, essentially, using something approximating a firewall to control access. Some traffic is allowed through unhindered, and some traffic is blocked.

                                                                        But that’s also sort of what Cloudflare (or any firewall) does. In the case of JSTOR the traffic is blocked by default and allowed through only after payment is made. With Cloudflare traffic is allowed through by default and only blocked when whatever heuristics they use have been triggered.

                                                                        So it’s different, but it doesn’t feel different enough, at least to me, to make it obvious that this ruling wouldn’t have applied to Schwartz’s case. If it was (obvious), then the ruling might also not apply to any web site behind Cloudflare (or any web site running a firewall).

                                                                        1. 4

                                                                          Doing any sort of protection, even ineffective, usually legally constitutes a content restriction. See DMCA 1201 for how absurdly loose the definition can be.

                                                                          1. 3

                                                                            Agreed. All I’m saying is that it’s maybe not totally ridiculous to think that the Aaron Schwartz case might have been impacted (to some extent) by this ruling if it had been on the books at the time. At the very least it might have opened up some new, potentially very interesting, lines of argument for his lawyers.

                                                                      2. 5

                                                                        Chronology. The law is in effect until a court rules the law is not in effect.

                                                                        1. 2

                                                                          Dang fourth dimension keeping criminals criminals. And keeping law abiding citizens from becoming retroactive criminals.

                                                                        2. 5

                                                                          I might be wrong but I think Schwartz was scraping the JSTOR using MIT’s subscription. If it’s like how I remember it there are certain blocks of IPs for Universities that were allowed more access as they were tied to a specific institution. Apparently he was also causing something of a DoS issue as he was pulling a great deal of data in a small amount of time. All hearsay but something to consider. JSTOR’s post regarding the incident

                                                                        1. 40

                                                                          Sorry for the grumpyness, but:

                                                                          I’m getting more and more convinced that in general programmers should not try satire nor rants.

                                                                          This is as bland as it gets, each argument are the cookie-cutter arguments made pro and con all the languages since their inception. There’s not a little bit of creativity and there’s not a bit of insight to be had.

                                                                          You could delete it and nothing of value is lost.

                                                                          I’m dead sure this article would not be spread if it weren’t published under a big name.

                                                                          1. 14

                                                                            Sometimes the resulting discussion is interesting. I learned my understanding of 100% pure differs from that of Haskell.

                                                                            1. 17

                                                                              I’m sorry you didn’t like it. I didn’t write it to “spread” it, though, I just wrote it because I wanted to. Am I not allowed such things because my blog posts frontpage on Lobsters too often? I didn’t submit this here, nor anywhere else.

                                                                              And for the record, I do think that there is value in all programmers being able to briefly summarize the advantages and drawbacks of a variety of technologies like this. This kind of thinking can help steer your judgement when starting new projects, and extends past languages and into operating systems, architectures, frameworks, etc, and is an essential kind of thinking for project design.

                                                                              1. 16

                                                                                The curse of popularity. No fun allowed.

                                                                                1. 5

                                                                                  I do think that there is value in all programmers being able to briefly summarize the advantages and drawbacks of a variety of technologies like this.

                                                                                  That’s great when you’re writing from a place of experience as you are for most of your post. The problem is the small bits where you aren’t, which you included presumably for completeness sake.

                                                                                  1. 1

                                                                                    haters gonna hate. I guess if you just put a disclaimer that it is satire and opinion.

                                                                                  2. 2

                                                                                    dead sure this article would not be spread if it weren’t published under a big name.

                                                                                    Not true, I wrote a similar one and it was up voted too. Hating on C++ is just lots of fun for everyone. C++ is a big boy and can handle it.

                                                                                    I’m getting more and more convinced that in general programmers should not try satire nor rants.

                                                                                    Hey, let’s not be ‘jobist’, SirCmpwn may be a dirty programmer, but he is also an entrepreneur and community manager too. Let’s not let those jobs have fun either.

                                                                                  1. 9

                                                                                    Starship is the minimal, blazing fast, and extremely customizable prompt for any shell!

                                                                                    What makes this minimal? As far as I can tell, it’s anything but minimal.

                                                                                    1. 4

                                                                                      cargo.lock is barely more than 1000 lines. That’s tiny!

                                                                                    1. 4

                                                                                      Where’s the patch?