1. 14

    This blog post: a case study in being a jerk to someone who is being a jerk, only since Linus is a “jerk” you get off scott-free. Unsurprisingly, this is written by someone who has never contributed to the Linux kernel and who was uninvolved in the discussion he’s picking apart.

    The revised email at the end does lose information. Contrary to what hipsters write blog posts complaining about, 99% of Linus’s emails are cordial. The information that’s lost is the conveyance that this is more important to Linus than most subjects.

    1. 19

      This comment: a case study in being a jerk to someone who is being a jerk to a jerk.

      In all seriousness, I don’t believe that Gary Bernhardt is being a jerk at all. There’s a line between being critical of a piece of work and calling someone brain damaged, and hopefully, we all can see the difference.

      Aside: I love when people use the word “hipster” to invalidate other viewpoints. Apparently, there are two modes of being: Being Right and Being A Hipster.

      1. 2

        To the unserious comment, I don’t think I was being a jerk. I called him a jerk, which I guess you could argue is a jerk move under any circumstances, but if I’m being a jerk then so is Gary.

        To the serious comment, I just want to note that “brain damaged” is a meme among old school hackers which isn’t as strong of a word as you think.

        To the aside, I don’t use hipster as an insult or to imply wrongness, but I do use it to invalidate his point. Gary is a Ruby developer. Linus is a kernel developer. The worlds are far removed from each other.

        1. 47

          I’ve put tens of thousands of lines of C into production, including multiple Linux kernel drivers. In one case, those kernel drivers were critical-path code on a device used in strain testing the wings of an airplane that you might’ve flown in by now.

          I’m not a stranger to the kernel; I just left that world. Behavior like Linus’ in that email was part of the reason, though far from the only reason.

          With all of that said: having written a bunch of systems software shouldn’t be a prerequisite for suggesting that we avoid attacking people personally when they make programming mistakes, or what we suspect are programming mistakes.

          1. 10

            Exactly. I’ve also met many people that do high-performance, embedded, and/or safety-critical code in C that are more polite in these situations. Linus’ attitude is a separate issue from what’s necessary to evaluate and constructively criticize code.

          2. 16

            “brain damaged” is a meme among old school hackers which isn’t as strong of a word as you think.

            Yikes. That “meme” is a whole other thing I don’t even care to unpack right now.

            I don’t use hipster as an insult or to imply wrongness, but I do use it to invalidate his point. Gary is a Ruby developer. Linus is a kernel developer. The worlds are far removed from each other.

            Gotcha. Kernal developer == real old-school hacker. Ruby developer == script kiddie hipster. Are we really still having this argument in 2018?


              Yikes. That “meme” is a whole other thing I don’t even care to unpack right now.

              “Brain damaged” is a term from back in the Multics days, Linus didn’t make that one up for the occasion. If you’re unfamiliar with the “jargon file” aka hacker dictionary, you can see the history of this particular term here: http://www.catb.org/jargon/html/B/brain-damaged.html

              1. 1

                Yikes. That “meme” is a whole other thing I don’t even care to unpack right now.

                Listen, cultures are different and culture shock is a thing. I’m in a thread full of foreigners shocked that customs are different elsewhere. You better just take my word for it on “brain damaged” because you clearly aren’t a member of this culture and don’t know what you’re talking about.

                Gotcha. Kernal developer == real old-school hacker. Ruby developer == script kiddie hipster. Are we really still having this argument in 2018?

                How about you quit putting words in my mouth? Do you really need me to explain the world of difference between Ruby development and kernel hacking? In 2018? It’s not a matter of skill. Gary is great at what he does, but it has almost nothing to do with what Linus does. The people who surround Gary and the people who surround Linus are mutually exclusive groups with different cultural norms.

                1. 18

                  You can’t use “it’s our culture” as a panacea; calling someone an idiot, moron etc. is a deliberate attempt to hurt them. I guess if what you’re saying is, “it’s our culture to intentionally hurt the feelings of people who have bad ideas,” well, then we might be at an impasse.

                  1. 20

                    The kind of toxic exclusivity and “old school hacker culture” elitism that you’re spouting in this thread is not what I expect to see on Lobsters. It makes me genuinely sad to see somebody saying these things and it also makes me apprehensive of ever being involved in the same project or community as you. Software development today is not what it was 20 –or even 5– years ago. Today it is far more about people than it is about software or technology. You may not like this, but it is the reality.

                    1. 7

                      Lobste.rs always had a few vocal people like this in threads. But note that they’re in the minority and generally are not upvoted as much as the people who aren’t elitist, racist, or just generally being a jerk.

                      1. 5

                        “old school hacker culture” elitism

                        Near 40, I can agree to be called old. But not elitist.
                        And I cannot accept to be associated with racist.

                        Not all software developers are hackers. Not all hackers are software developers.

                        Is stating this “elitism”? Is it “racism”? Is it being “jerk”?
                        Or is just using terms properly?

            2. 5

              The information that’s lost is the conveyance that this is more important to Linus than most subjects.

              So add “I want to stress that this issue is really important to me” at the end of the revised email.

              I think that making an issue out of this particular information being lost is missing the point - that it would be possible to say the same thing as Linus did without being abusive.

              Contrary to what hipsters write blog posts complaining about

              You’re falling into the same trap that the post discusses. This derision isn’t necessary to make your point, and doesn’t make it any stronger - it just adds an unnecessary insult.

              1. 9

                Contrary to what hipsters write blog posts complaining about, 99% of Linus’s emails are cordial.

                That may well be true, but do we need that last 1% in a professional setting?

                1. 9

                  (I am not defending Linus’ behaviour here, please don’t put those words in my mouth.)

                  I strongly take issue with American ideas of “professionalism”, and an even more so with the idea that we get to decide whether this project is “a professional setting” or not. What exactly makes this a “professional setting”? What is a “professional setting”? Why do we hold some interactions to higher standards than others?

                  I suspect “money changing hands” is the thing that makes this “a professional setting”, and that grinds my gears even further. Why are we supposed to hold ourselves to different standards just because some people are getting paid for doing it?

                  1. 3

                    Right, “professionalism” implies that you only need to be nice to somebody when you want them to something for you or want their money. This should actually be about “respect”, whether or not you want a Linux contributor to do something for you or want their money.

                  2. 13

                    The Linux kernel is not a professional setting. Besides, I argue that the 1% is useful, even in a professional setting - sometimes strong words are called for. I’ll be That Guy and say that people should grow a thicker skin, especially people who weren’t even the subject of the email and have never been involved in kernel development.

                    1. 13

                      If I look at who the contributors to the Linux kernel are, it would certainly appear to be a professional endeavor.

                      A large chunk of contributions to the kernel are made by people who are getting paid by the companies they work for to contribute. Sounds like a professional setting to me.

                      1. 4

                        Linux development is only “a professional endeavour” (which is a phrase I have strong issues with, see above) because some people decided to build their businesses in Linus’ craft room. We can like or dislike Linus’ behaviour, but we don’t get to ascribe “professionalism” or lack thereof (if there even is such a thing) to Linus’ work or behaviour, or that of any of the contributors.

                        Even if “professionalism” is an actual thing (it’s not; it’s just a tool used by people in power to keep others down) it’s between the people doing the paying, and the people getting the pay, and has nothing to do with any of us.

                        This idea that people should behave differently when there’s money involved is completely offensive to me.

                        1. 7

                          But it’s not. It’s a collaboration between everyone, including professionals and hobbyists. The largest group of kernel contributors are volunteers. On top of that, Linus doesn’t have to answer to anyone.

                          1. 8

                            So, having a hobbyist involved means that you can be dickhead? Is that the conclusion that should be drawn from your statements?

                            1. 3

                              No. I’m saying that Linus is not a dickhead, Linux is not a professional endeavour, and neither should be held to contrived professional standards.

                              1. 2

                                “I’m saying that Linus is not a dickhead”

                                His comments are proving otherwise given the main article shows the same information could’ve been conveyed without all the profanity, personal insults, and so on. He must be adding that fluff because he enjoys it or has self-control issues. He’s intentionally or accidentally a dick. I say that as a satirist whose a dick to people that give me headaches in real life. Although it doesn’t take one to know one, being someone whose always countering dicks and assholes with some dickish habits of his own makes what Linus is doing more evident. If no mental illness, there’s little excuse past him not giving a shit.

                                1. 5

                                  “doesn’t behave according to my cultural norms” == “mental illness”


                                  I would really appreciate it if you could stop expecting that your cultural norms have to apply to everyone on the planet.


                                    Im identifying the cultural norm of being an asshole, saying it applies to him at times, and saying the project would benefit if he knocked if off. Im not forcing my norms on anyone.

                                    Your comment is more amusing giving someone with Linus’s norns might just reply with profanity and personsl insults. Then, you might be complaining about that. ;)


                                      Then, you might be complaining about that. ;)

                                      No, I’d just accept that people from different cultures behave differently.

                                      Let’s face it, most people hate getting told they are wrong, regardless of the tone. That’s just how we are as humans.

                                      Taking offense about the tone just seems very US-specific, as they are accustomed to receiving some special superpowers in a discussion by uttering “I’m offended”.

                                      Some of the best feedback I received in my life wouldn’t be considered acceptable by US standards and I simply don’t care – I just appreciate the fact that someone took his time to spell out the technical problems.

                                      Here is a recent example: https://github.com/rust-lang/cargo/pull/5183#issuecomment-381449546


                                        Then you and I arent that different in how we look at stuff. Ive just layered on top of it a push for project owners to do what’s most effective on social side.

                                  2. 2

                                    I believe it’s intentional. He does not want to be bothered by nurturing the newbs, so he deters them from going to him directly and forces them to do their learning elsewhere.

                                  3. 2

                                    These numbers suggest it is a professional endeavor:


                                    1. 2

                                      Those numbers just break down the professionals involved, and don’t consider the volunteers. If you sum the percentages in that article you get around 40%. Even accomodating for smaller companies that didn’t make the top N companies, that’s a pretty big discrepancy.

                            2. 6

                              Linus himself is working in a professional capacity. He’s employed by the Linux Foundation to work on Linux. The fact he is employed to work on an open source project that he founded doesn’t make that situation non-professional.

                        1. 2

                          I will be at the National Morris Weekend :D

                          1. 4

                            The short answer is no. It’s a very hard problem in general.

                            The longer answer would be it depends. I am not aware of any such tool, but if the pieces of code over which you want to run such an analysis use a very specific subset of javascript in a very specific way, then it might be doable.

                            If you want to test the equivalence of pure functions, generative testing (e.g. QuickCheck in Haskell) could also be used.

                            1. 1

                              If you want to test the equivalence of pure functions, generative testing (e.g. QuickCheck in Haskell) could also be used.

                              Sadly, there’s very little in the way of pure functions to be found in this particular codebase. If I could snapshot the program state at the entry and exit points of a function I was refactoring, and then replace the old code with the new, I might be able to glean some insight. But that seems… hard 🤔

                              1. 2

                                you can introduce seams, to use the WEwLC language, by turning the relevant state into input to the function and turning any relevant mutations into output that get applied once the functions has returned. Now you do have a pure function whose behaviour can be captured in tests.

                                BTW if that feels like too big a leap to make in one go, look at introducing proxyquire into your tests, which lets you replace any dependencies when you set up your fixtures. We use a combination of proxyquire and sinon at work where we need to test that a function performs some expected external action.

                            1. 17

                              Kinda tempted to write a “Careful Research Manifesto”, with statements like

                              • Old technologies are products of their context
                              • New technologies are also products of their context
                              • Context is social and economic, not just technical
                              • You should know what you’re trying to solve with any technology you pick
                              • Do the research first
                              1. 2

                                “A month in the laboratory can save an hour in the library” is one of my favourite quotes and is relevant here :)

                              1. 4

                                This feels like it’s partway toward reinventing 1970s garbage collection. The remaining steps:

                                • rather than each subsystem having an array of objects it gives out, the whole system picks from a single array.
                                • now that you only ever give out objects based on their index in the array, you can see which indices are no longer in use and reclaim their space.

                                One implementation I read about (in the Smalltalk green book, but I don’t think it was new when it appeared in the documented Smalltalk implementation) was to maintain two handle tables. Periodically, swap to the other table for new allocations, and when objects are accessed migrate them and every object that can be reached from them from the prior table to the new one. When it comes time to swap back to the first table, clear out any objects that are still only found there.

                                1. 4

                                  You’ll find that these systems often use arena/slab allocation–a level loads, and the whole thing is chucked away after the subsystem is shutdown.

                                  More general GC stuff is usually not of huge interest to game developers, and with good reason.

                                  1. 3

                                    There was an article (unfortunately I can’t find a link at the moment because I can’t think of the title or enough search terms to recover it) in the early 1980s suggesting that the short-lived object collector run all the time and the full tracing collector run when the user takes a break, such as when they leave the computer for a coffee. “The user has not yet pressed fire to start the next level” would be an analogous case.

                                1. 5

                                  I’d love to read their post-mortem. They failed at like all possible steps :D

                                  1. 24

                                    They appear to have quite a successful business selling multiple locks to infosec bloggers.

                                    1. 2

                                      God, that’s brilliant. Just continually create minimal IoT products and trick bloggers into tearing them down after buying them.

                                    2. 3

                                      Sure the execution was badly done, but the entire concept was appalling to begin with. Adding fragile battery-powered electronics to a padlock is already pretty stupid. Adding a radio-frequency attack surface to that is stupider. But putting the whole thing on the internet is really the cherry on top. Who the hell buys these products?

                                      I hope the ridicule this story generates helps a little more of the general public see the implicit “Id” prefix in front of “IoT”.

                                      All that said…. remember when one of the world’s most reputable bike-lock makers got embarrassed to the point of recalling multiple product lines, all because of a PoC video featuring a Bic pen? Shit happens, in the consumer lock biz no less than anywhere else.

                                      1. 1

                                        Well, there’s this, but it’s disappointing. David Tao fucked up massively, and his professional credibility will suffer massively if he doesn’t fix it quick.

                                      1. 21

                                        I don’t think the opposite of “novelty for novelty’s sake” should be “tradition for tradition’s sake”. I like the choose boring technology post because that author allows that sometimes, the usual way of doing things is “expensive and difficult” and in those cases it makes sense to be more adventurous in solution choice. I wouldn’t necessarily always pick the same “boring except where you spent your innovation tokens” approach but it’s a position that is reasoned rather than reactionary.

                                        1. 2

                                          Agreed, I was actually almost on the authors side until I read the examples, all of which are extremely subjective. Microservices, NoSQL, and SPA’s all make sense in some contexts, and both sides of those dichotomies can be architected well or terribly.

                                        1. 4

                                          Work - all over the shop, mostly some work on replacing some existing crypto key management with Vault’s transit backend. Also helping our QAs use the system architecture to make decisions about test design and coverage.

                                          Non-work - I wrote a side-project app to keep notes on research papers in GNUstep, and used Renaissance for the GUI (it’s an XML format on disk, and an easy layout system, very similar to the Stack Views stuff in very new iOS). It’s missing support for some view classes that I’ve been laying out in code, so I’m going back and adding that to Renaissance.

                                          Additionally I recently started documenting my views on OOP, having spent years doing talks all based on the premise that the easy bits are useful, the complex bits are generally wasteful, the whole thing has become internally inconsistent but eventually you have to give up trying to write procedural programs with “classes” as the units of modularity and start composing objects.

                                          Non-computer - a choir I’m performing in for the Warwick Folk Festival has its first practice this week.

                                          1. 9

                                            Many “large”/“successful” open source projects also directed by not-for-profits (rarely charities like the Free Software Foundation or Software Freedom Conservancy, more often business interest groups like the Node or Linux Foundations), and rare is the corporate-directed project that doesn’t also require a CLA or copyright assignment so that the third-party code is controlled by the corporation or its business interest group.

                                            As TFA says, we have a bazaar, but it’s in the grounds of the cathedral and you need a permit from the deacon to set up your stall.

                                            1. 4

                                              “At the end of the day, nearly all of us run software on the Linux Kernel. The Linux Kernel is written in C, and has no intention of accepting C++ for good reasons. There are alternative kernels in development that use languages other than C such as Fuschia and MirageOS, but none have yet reached the maturity to run production workloads.”

                                              First counter is all the software not running on Linux kernel. Microsoft, Apple, IBM, Unisys, etc still exist with their ecosystems. Second, there’s two things here author is conflating with the C justifications which are too common: effect of legacy development; what happens at a later point. For legacy, the software gets written in one language a long time ago, becomes huge over time, and isn’t rewritten for cost/time/breakage reasons. That’s the OS’s for sure given their size and heritage. Although legacy kernels are in C, much of Windows is in C++ and Mac OS X in Objective-C. They intentionally avoided C for those new things.

                                              Outside those, Burroughs MCP is done in an ALGOL, IBM uses macro-ASM’s + PL/S for some of theirs, and OpenVMS has a macro-asm + BLISS in theirs. Those are still sold commercially and in production. For others in past, there were LISP machines in LISP variants, Modula-2/Oberon systems w/ Astrobe still selling it for microcontrollers, Pascal, FreeBASIC, Prime had a Fortran OS, Ada used from embedded to mainframe OS’s, and several in Rust now. There’s also model of systems stuff in high-level language that depends on tiny amount of low-level stuff done in assembly or low-level language. OS projects were done that way in Haskell and Smalltalk.

                                              Lot of options. You don’t need C for OS’s. The sheer amount of OS work, libraries, compiler optimizations, and documentation make it a good choice. It’s not the only one in widespread use or strictly necessary, though. It’s possible other things will work better for OS developers/users depending on their needs or background.

                                              1. 2

                                                I don’t believe the Mac OS X Kernel uses Obj-C. It’s mostly C with the drivers in C++.

                                                1. 4

                                                  True (source: I used to write kernel extensions for macOS to do filesystem things). NeXTStep/OpenStep had Driver Kit, an ObjC framework for writing device drivers in-kernel, which appeared in early Mac OS X developer previews but not in the released system.

                                                  Specifically IOKit (the current macOS driver framework) is Embedded C++, which is C++ minus some bits like exceptions.

                                                  BTW Cocoa is also a “legacy part”, but it comes from NeXT’s legacy, not Apple’s. IOKit (the C++ driver framework) was new to Mac OS X (it didn’t come from NeXT or Mac OS 8, though clearly it was a thin port of DriverKit) and the xnu kernel was an update of NeXT’s version of CMU Mach 2.5.

                                                  1. 3

                                                    Yeah, that’s the legacy part. They just keep using what it’s already in. It was the newer stuff like Cocoa that used Objective-C IIRC. I should’ve been more clear.

                                                    1. 1

                                                      that has nothing to do with the kernel negates the point. It amplifies the C point because darwin is written in C

                                                      1. 1

                                                        It doesn’t at all. I already addressed why the kernel stays in C: someone long ago chose C over the other systems languages with so much code they can’t justify rewriting it. It’s an economic rather than a language effect. Thinking it’s strictly the properties of C is like saying Sun Microsystems wasn’t the cause of the rise of Java, Microsoft wasn’t behind rise of .NET, and so on. People are still being trained in those languages to add to massive codebases that are too big to rewrite. Same thing that always happens.

                                                        1. 2

                                                          big or not (and xnu is biggish), risk is more of a concern than cost. the kernel needs to stay up a few years in between panics and they’ve already got it there for the C code.

                                                          1. 1


                                                    2. 2

                                                      In addition to all that, I think the systems level domain also has a new growth sector by replacing the kernel with a hypervisor+library combination. Aka, the topic from this talk[1].

                                                      [1] https://www.youtube.com/watch?v=L-rX1_PRdco

                                                      1. 2

                                                        Although still listening to talk, their robur collective has a great, landing page. Lots of good stuff on it. I also like her team is working on a home router. That’s what I told separation kernel vendors to build since it’s (a) hugely important, (b) huge market, and (c) can be done incrementally starting with virtualized Linux/BSD.

                                                    1. 4

                                                      Organising my Morris dance team’s cyclobooze, which is a 30-ish mile ride with pub stops.

                                                      Trying out Molly dancing tomorrow, which involves a five-hour round trip. So I’ve also racked up a few audio books for the journey.

                                                      1. 1

                                                        Let me guess, all the pubs are on a CAMRA list?

                                                        1. 2

                                                          we’ve embraced diversity and even have some cider drinkers now!

                                                      1. 3

                                                        And dd stands for Data Definition, the name of the analogous command on IBM mainframes.

                                                        1. 6

                                                          A minor nit: thread-local storage is part of real C since C11, and is no longer a GNU extension.

                                                          1. 9

                                                            There is apparently very little constructive to be said about a twitter thread with very little content.

                                                            Yes, I’ve flagged.

                                                            Please, consider the same.

                                                            1. 14

                                                              I am making a very frowny face at the snarky hot takes about these. Contemptuous knee-jerk gripes are bad in and of themselves, rarely lead to good conversation, and erode community norms. We’ve already seen Reddit, Digg, and YC News fall down that slippery slope.

                                                              I don’t know if this is encouraged by the fact that the story link goes to twitter instead of a longer explanation in an article or talk, but it probably doesn’t help.

                                                              1. 10

                                                                Those communities had more damage done to them by the garbage of Twitter posts and hotcakes than by people trying to keep weeds out.

                                                                Everybody wants a garden, nobody likes being interrupted by the gardeners.

                                                                1. 2

                                                                  I think @pushcx was agreeing with my review of the comments thus posted. I… think?

                                                                  1. 3

                                                                    I was, and so was friendlysock.

                                                                2. 1

                                                                  Let’s post agreed upon community norms on the wall of our bike shed. 🦞

                                                                  1. -2

                                                                    In Soviet Russia, takes heat you!

                                                                    I know I’m not helping. No regrets.

                                                                    1. 1

                                                                      In Soviet Russia…

                                                                      Shall we really go back to slashdot’s Natalie Portman naked and petrified with hot grits nonsense and whatever happened on kuro5hin? Some of it gets a smirk but it’s not a good use of my time.

                                                                  2. 1

                                                                    I’ve flagged it too. The story here is probably interesting, but the twitter thread is just nonsense.

                                                                    1. 1

                                                                      no, but their approach to not doing so is quite entertaining.

                                                                    1. 3

                                                                      When there are ~10 people doing different things telling what they did yesterday and what are they working on today

                                                                      Is the problem that you are trying to pretend that the ten people doing different things are a team, or that the ten different tasks dished out in planning represent a team goal?

                                                                      1. 1

                                                                        This is very succinct and I suspect goes to the true heart of the problem.

                                                                      1. 14

                                                                        Truth be told, I see very little actual argument in the post. He mentions 4 languages/environments he’s impressed with, 3 of them dynamically typed, one an example of how people would not implement static typing in 2018.

                                                                        Then he lists the points that Swift is meant for. He mentions that it does not achieve these goals. Why does it not? What’s some example of it not working out, in a way that e.g. ObjC does? He then presents a list of features a language should have, but why Swift, a language for writing end-user applications in the Apple ecosystem would care about distributed systems remains mysterious. Also, how is it not focusing on developer productivity? No answer is given.

                                                                        Then it ends up with “maybe Elixir is nice” which, uhm, yes, it is Erlang with a Ruby syntax. We’re back to the beginning of the post.

                                                                        Now, I am not defending Swift but dismissing Swift for what the author himself calls “rant” feels a bit premature to me. I would have liked to see these claims substantiated (e.g. how Swift is difficult to debug, compared to ObjC for instance, how is it not productive, how is it worse than ObjC for App and UI development), because the main point I see is “Swift is not a dynamically typed language”.

                                                                        Any insight on the shortcomings of Swift as an answer are greatly appreciated. I believe lobsters can create a better, more nuanced list than this rant.

                                                                        1. 2

                                                                          I think “Swift is not a dynamic language” is a decent point. I’m not sure what you mean by dynamically typed, but I’m going to use specific examples of the dynamism I use when writing Cocoa programs in Objective-C to illustrate how I mean dynamism.

                                                                          A couple of common cases where I use dynamic language features, because the design of Cocoa seems to lend itself to doing so:

                                                                          • when preparing the display of collections of data (e.g. table views, collection views), I want to be able to say “this property appears in this place”, and “this UI change affects this property. I can do that by composing selectors based on the name of the property being displayed, or by using KVC which is an Objective-C technology that does the same thing.
                                                                          • when validating the availability of UI actions (e.g. menu items, toolbar items, buttons), I want to be able to ask “are the preconditions for performing this action satisfied?”. I do that by extracting the preconditions to a method whose name is derived from the action’s selector, and then asking the relevant controller object to perform that selector.

                                                                          Another thing I often do which has nothing (much) to do with dynamism but which Cocoa was designed with as an axiom and that Swift does not support is to use nil as the message sink.

                                                                          I’m sympathetic to the idea that Objective-C as a language has shortcomings and that a different language would make Apple platform development more accessible. Shortly before Swift was announced I wrote that there already were tons of languages with ObjC bindings, because “ObjC bindings” are just FFI calls to a small handful of runtime functions. My hope at the time was that a language built in such a way - exposing the object runtime but hiding the complexity of all the C interop and memory management - would be the future. It’s not an unreasonable expectation, as Apple had integrated the open source PerlObjCBridge and PyObjC, and had developed MacRuby. But Swift is not that, it is a different model of computation that also has language support for Cocoa and (some) ObjC features.

                                                                          1. 1

                                                                            My hope at the time was that a language built in such a way - exposing the object runtime but hiding the complexity of all the C interop and memory management - would be the future.

                                                                            So, something like Vala is for C+GObject? A C#-inspired wrapper around the idioms of the GObject system.

                                                                            1. 1

                                                                              Exactly that sort of thing. Vala appears to be designed to expose the GObject model, whereas using GTK+ in C is merely possible. The actual examples I had in mind were StepTalk and NeXT’s WebScript, but they’re basically doing the same thing.

                                                                        1. 23

                                                                          Kinda late on UNIX bashing bandwagon :)

                                                                          Also, Windows owes more of it’s legacy to VMS.

                                                                          1. 10

                                                                            It does, but users don’t use any of the VMSy goodness in Windows: To them it’s just another shitty UNIX clone, with everything being a file or a program (which is also a file). I think that’s the point.

                                                                            Programmers rarely even use the VMSy goodness, especially if they also want their stuff to work on Mac. They treat Windows as a kind of retarded UNIX cousin (which is a shame because the API is better; IOCP et al)

                                                                            Sysadmins often struggle with Windows because of all the things underneath that aren’t files.

                                                                            Message/Object operating systems are interesting, but for the most part (OS/2, BeOS, QNX) they, for the most part, degraded into this “everything is a file” nonsense…

                                                                            Until they got rid of the shared filesystem: iOS finally required messaging for applications to communicate on their own, and while it’s been rocky, it’s starting to paint a picture to the next generation who will finally make an operating system without files.

                                                                            1. 10

                                                                              If we talk user experiences, it’s more a CP/M clone than anything. Generations later, Windows still smells COMMAND.COM.

                                                                              1. 6

                                                                                yes, the bowels are VMS, the visible stuff going out is CP/M

                                                                                1. 4

                                                                                  Bowels is a good metaphor. There’s good stuff in Windows, but you’ve got to put on a shoulder length glove and grab a vat of crisco before you can find any of it.

                                                                              2. 10

                                                                                I think you’re being a little bit harsh. End-users definitely don’t grok the VMSy goodness; I agree. And maybe the majority of developers don’t, either (though I doubt the majority of Linux devs grok journald v. syslogs, really understand how to use /proc, grok Linux namespaces, etc.). But I’ve worked with enough Windows shops to promise you that a reasonable number of Windows developers do get the difference.

                                                                                That said, I have a half-finished book from a couple years ago, tentatively called Windows Is Not Linux, which dove into a lot of the, “okay, I know you want to do $x because that’s how you did it on Linux, and doing $x on Windows stinks, so you think Windows stinks, but let me walk you through $y and explain to you why it’s at least as good as the Linux way even though it’s different,” specifically because I got fed up with devs saying Windows was awful when they didn’t get how to use it. Things in that bucket included not remoting in to do syswork (use WMI/WinRM), not doing raw text munging unless you actually have to (COM from VBScript/PowerShell are your friends), adapting to the UAC model v. the sudo model, etc. The Windows way can actually be very nice, but untraining habits is indeed hard.

                                                                                1. 6

                                                                                  I don’t disagree with any of that (except maybe that I’m being harsh), but if you parse what I’m saying as “Windows is awful” then it’s because my indelicate tone has been read into instead of my words.

                                                                                  The point of the article is that those differences are superficial, and mean so very little to the mental model of use and implementation as to make no difference: IOCP is just threads and epoll, and epoll is just IOCP and fifos. Yes, IOCP is better, but I desperately want to see something new in how I use an operating system.

                                                                                  I’ve been doing things roughly the same way for nearly four decades, despite the fact that I’ve done Microsoft/IBM for a decade, Linux since Slackware 1.1 (Unix since tapes of SCO), Common Lisp (of all things) for a decade, and OSX for nearly that long. They’re all the same, and that point is painfully clear to anyone who has actually used these things at a high level: I edit files, I copy files, I run programs. Huzzah.

                                                                                  But: It’s also obvious to me who has gone into the bowels of these systems as well: I wrote winback which was for a long time the only tools for doing online Windows backups of standalone exchange servers and domain controllers; I’m the author of (perhaps) the fastest Linux webserver; I wrote ml a Linux emulator for OSX; I worked on ECL adding principally CL exceptions to streams and the Slime implementation. And so on.

                                                                                  So: I understand what you mean when you say Windows is not Linux, but I also understand what the author means when he says they’re the same.

                                                                                  1. 2

                                                                                    That actually makes a ton of sense. Can I ask what would qualify as meaningfully different for you? Oberon, maybe? Or a version of Windows where WinRT was front-and-center from the kernel level upwards?

                                                                                    1. 2

                                                                                      I didn’t use the term “meaningfully different”, so I might be interpreting your question you too broadly.

                                                                                      When I used VMS, I never “made a backup” before I changed a file. That’s really quite powerful.

                                                                                      The Canon Cat had “pages” you would scroll through. Like other forth environments, if you named any of your blocks/documents it was so you could search [leap] for them, not because you had hierarchy.

                                                                                      I also think containers are very interesting. The encapsulation of the application seems to massively change the way we use them. Like the iOS example, they don’t seem to need “files” since the files live inside the container/app. This poses some risk for data portability. There are other problems.

                                                                                      I never used Oberon or WinRT enough to feel as comfortable commenting about them as I do about some of these other examples.

                                                                                  2. 2

                                                                                    If it’s any motivation I would love to read this book.

                                                                                    Do you know of any books or posts I could read in the meantime? I’m very open to the idea that Windows is nice if you know which tools and mental models to use, but kind of by definition I’m not sure what to Google to find them :)

                                                                                    1. 4

                                                                                      I’ve just been hesitant because I worked in management for two years after I started the book (meaning my information atrophied), and now I don’t work with Windows very much. So, unfortunately, I don’t immediately have a great suggestion for you. Yeah, you could read Windows Internals 6, which is what I did when I was working on the book, but that’s 2000+ pages, and most of it honestly isn’t relevant for a normal developer.

                                                                                      That said, if you’ve got specific questions, I’d love to hear them. Maybe there’s a tl;dr blog post hiding in them, where I could salvage some of my work without completing the entire book.

                                                                                  3. 7

                                                                                    but users don’t use any of the VMSy goodness in Windows: To them it’s just another shitty UNIX clone, with everything being a file or a program (which is also a file). I think that’s the point.

                                                                                    Most users don’t know anything about UNIX and can’t use it. On the UI side, pre-NT Windows was a Mac knockoff mixed with MSDOS which was based on a DOS they got from a third party. Microsoft even developed software for Apple in that time. Microsoft’s own users had previously learned MSDOS menu and some commands. Then, they had a nifty UI like Apple’s running on MSDOS. Then, Microsoft worked with IBM to make a new OS/2 with its philosophy. Then, Microsoft acquired OpenVMS team, made new kernel, and a new GUI w/ wizard-based configuration of services vs command line, text, and pipes like in UNIX.

                                                                                    So, historically, internally, layperson-facing, and administration, Windows is a totally different thing than UNIX. Hence, the difficulty moving Windows users to UNIX when it’s a terminal OS with X Windows vs some Windows-style stuff like Gnome or KDE.

                                                                                    You’re also overstating the everything is a file by conflating OS’s that store programs or something in files vs those like UNIX or Plan 9 that use file metaphor for about everything. It’s a false equivalence: from what I remember, you don’t get your running processes in Windows by reading the filesystem since they don’t use that metaphor or API. It’s object based with API calls specific to different categories. Different philosophy.

                                                                                    1. 3

                                                                                      Bitsavers has some internal emails from DEC at the time of David Cutler’s departure.

                                                                                      I have linked to a few of them.

                                                                                      David Cutler’s team at DECwest was working on Mica (an operating system) for PRISM (a RISC CPU architecture). PRISM was canceled in June of 1988. Cutler resigned in August of 1988 and 8 other DECwest alumni followed him at Microsoft.

                                                                                  4. 5

                                                                                    I have my paper copy of The Unix Hater’s Handbook always close at hand (although I’m missing the barf bag, sad to say).

                                                                                    1. 5

                                                                                      I always wanted to ask the author of The Unix Hater’s Handbook if he’s using Mac OS X


                                                                                      1. 5

                                                                                        It was edited by Simson Garfinkel, who co-wrote Building Cocoa Applications: a step-by-step guide. Which was sort of a “port” of Nextstep Programming Step One: object-oriented applications

                                                                                        Or, in other words, “yes” :)

                                                                                        1. 2

                                                                                          Add me to the list curious about what they ended up using. The hoaxers behind UNIX admitted they’ve been coding in Pascal on Macs. Maybe it’s what the rest were using if not Common LISP on Macs.

                                                                                      2. 7

                                                                                        Beat me to it. Author is full of it right when saying Windows is built on UNIX. Microsoft stealing, cloning, and improving OpenVMS into Windows NT is described here. This makes the Linux zealots’ parodies about a VMS desktop funnier given one destroyed Linux in desktop market. So, we have VMS and UNIX family trees going in parallel with the UNIX tree having more branches.

                                                                                        1. 4

                                                                                          The author doesn’t say Windows is built on Unix.

                                                                                          1. 5

                                                                                            “we are forced to choose from: Windows, Apple, Other (which I shall refer to as “Linux” despite it technically being more specific). All of these are built around the same foundational concepts, those of Unix.”

                                                                                            Says it’s built on the foundational concepts of UNIX. It’s built on a combo of DOS, OS/2, OpenVMS, and Microsoft concepts they called the NT kernel. The only thing UNIX-like was the networking stack they got from Spider Systems. They’ve since rewritten their networking stack from what I heard.

                                                                                            1. 4

                                                                                              Says it’s built on the foundational concepts of UNIX.

                                                                                              I don’t see any reason to disagree with that.

                                                                                              The only thing UNIX-like …

                                                                                              I don’t think that’s a helpful definition of “unix-like”.

                                                                                              It’s got files. Everything is a file. Windows might even be a better UNIX than Linux (since UNC)

                                                                                              Cutler might not have liked UNIX very much, but Windows NT ended up UNIX anyway because none of that VMS-goodness (Versions, types, streams, clusters) ended up in the hands of Users.

                                                                                              1. 10

                                                                                                It’s got files. Everything is a file.

                                                                                                Windows is object-based. It does have files which are another object. The files come from MULTICS which UNIX also copied in some ways. Even the name was a play on it: UNICS. I think Titan invented the access permissions. The internal model with its subsystems were more like microkernel designs running OS emulators as processes. They did their own thing for most of the rest with the Win32 API and registry. Again, not quite how a UNIX programming guide teaches you to do things. They got clustering later, too, with them and Oracle using the distributed, lock approach from OpenVMS.

                                                                                                Windows and UNIX are very different in approach to architecture. They’re different in how developer is expected to build individual apps and compose them. It wasn’t even developed on UNIX: they used OS/2 workstations for that. There’s no reason to say Windows is ground in the UNIX philosophy. It’s a lie.

                                                                                                “Windows NT ended up UNIX anyway because none of that VMS-goodness (Versions, types, streams, clusters) ended up in the hands of Users.”

                                                                                                I don’t know what you’re saying here. Neither VMS nor Windows teams intended to do anything for UNIX users. They took their own path except for networking for obvious reasons. UNIX users actively resisted Microsoft tech, too. Especially BSD and Linux users that often hated them. They’d reflexively do the opposite of Microsoft except when making knockoffs of their key products like Office to get desktop users.

                                                                                                1. 3

                                                                                                  Windows is object-based.

                                                                                                  Consider what methods of that “object” a program like Microsoft Word must be calling besides “ReadFile” and “WriteFile”.

                                                                                                  That the kernel supports more methods is completely pointless. Users don’t interact with it. Programmers avoid it. Sysadmins don’t understand it and get it wrong.

                                                                                                  I don’t know what you’re saying here.

                                                                                                  That is clear, and yet you’re insisting I’m wrong.

                                                                                                  1. 3

                                                                                                    Except, that’s completely wrong.

                                                                                                    I just started Word and dumped a summary of its open handles by object type:

                                                                                                    C:\WINDOWS\system32>handle -s -p WinWord.exe
                                                                                                    Nthandle v4.11 - Handle viewer
                                                                                                    Copyright (C) 1997-2017 Mark Russinovich
                                                                                                    Sysinternals - www.sysinternals.com
                                                                                                    Handle type summary:
                                                                                                      ALPC Port       : 33
                                                                                                      Desktop         : 1
                                                                                                      Directory       : 3
                                                                                                      DxgkSharedResource: 2
                                                                                                      DxgkSharedSyncObject: 1
                                                                                                      EtwRegistration : 324
                                                                                                      Event           : 431
                                                                                                      File            : 75
                                                                                                      IoCompletion    : 66
                                                                                                      IoCompletionReserve: 1
                                                                                                      IRTimer         : 8
                                                                                                      Key             : 171
                                                                                                      KeyedEvent      : 24
                                                                                                      Mutant          : 32
                                                                                                      Process         : 2
                                                                                                      Section         : 67
                                                                                                      Semaphore       : 108
                                                                                                      Thread          : 138
                                                                                                      Timer           : 7
                                                                                                      Token           : 3
                                                                                                      TpWorkerFactory : 4
                                                                                                      WaitCompletionPacket: 36
                                                                                                      WindowStation   : 2
                                                                                                    Total handles: 1539

                                                                                                    Each of these types is a distinct kernel object with its own characteristics and semantics. And yes, you do create and interact with them from user-space. Some of those will be abstracted by lower-level APIs, but many are directly created and managed by the application. You’ll note the number of open “files” is a very small minority of the total number of open handles.

                                                                                                    Simple examples of non-file object types commonly manipulated from user-land include Mutants (CreateMutex) and Semaphores (CreateSemaphore). Perhaps the most prominent example is manipulating the Windows Registry; this entails opening “Key” objects, which per above are entirely distinct from regular files. See the MSDN Registry Functions reference.

                                                                                                    1. 0

                                                                                                      None of these objects can exist on a disk; they cannot persist beyond shutdown, and do not have any representation beyond their instantaneous in-memory instance. When someone wants an “EtwRegistration” they’re creating it again and again.

                                                                                                      Did you even read the article? Or are you trolling?

                                                                                                      1. 3

                                                                                                        None of these objects can exist on a disk; they cannot persist beyond shutdown, and do not have any representation beyond their instantaneous in-memory instance. When someone wants an “EtwRegistration” they’re creating it again and again.

                                                                                                        Key objects do typically exist on disk. Albeit, the underlying datastore for the Registry is a series of files, but you never directly manipulate those files. In the same sense you may ask for C:\whatever.txt, you may ask for HKLM:\whatever. We need to somehow isolate the different persisted data streams, and that isolation mechanism is a file. That doesn’t mean you have to directly manipulate those files if the operating system provides higher-level abstractions. What exactly are you after?

                                                                                                        From the article:

                                                                                                        But in Unix land, this is a taboo. Binary files are opaque, say the Unix ideologues. They are hard to read and write. Instead, we use Text Files, for it is surely the path of true righteousness we have taken.

                                                                                                        The Windows Registry, which is a core part of the operating system, is completely counter to this. It’s a bunch of large binary files, precisely because Microsoft recognised storing all that configuration data in plain text files would be completely impractical. So you don’t open a text file and write to it, you open a Registry key, and store data in it using one of many predefined data types (REG_DWORD, etc…).

                                                                                                        Did you even read the article? Or are you trolling?

                                                                                                        It sounds like you’re not interested in a constructive and respectful dialogue. If you are, you should work on your approach.

                                                                                                        1. -3

                                                                                                          What exactly are you after?

                                                                                                          Just go read the article.

                                                                                                          It’s about whether basing our entire interactions with a computer on a specific reduction of verbs (read and write) is really exploring what the operating system can do for us.

                                                                                                          That is a very interesting subject to me.

                                                                                                          Some idiot took party to the idea that Windows basically “built on Unix” then back-pedalled it to be about whether it was based on the same “foundational” concepts, then chooses to narrowly and uniquely interpret “foundational” in a very different way than the article.

                                                                                                          Yes, windows has domains and registries and lots of directory services, but they all have the exact same “file” semantics.

                                                                                                          But now you’re responding to this strange interpretation of “foundational” because you didn’t read the article either. Or you’re a troll. I’m not sure which yet.

                                                                                                          Read the article. It’s not well written but it’s a very interesting idea.

                                                                                                          Each of these types is a distinct kernel object with its own characteristics and semantics

                                                                                                          Why do you bring this up in response to whether Windows is basically the same as Unix? Unix has lots of different kernel “types” all backed by “handles”. Some operations and semantics are shared by handles of different types, but some are distinct.

                                                                                                          I don’t understand why you think this is important at all.

                                                                                                          It sounds like you’re not interested in a constructive and respectful dialogue. If you are, you should work on your approach.

                                                                                                          Do you often jump into the middle of a conversation with “Except, that’s completely wrong?”

                                                                                                          Or are you only an asshole on the Internet?

                                                                                                          1. 4

                                                                                                            Or are you only an asshole on the Internet?

                                                                                                            I’m not in the habit of calling people “asshole” anywhere, Internet or otherwise. You’d honestly be more persuasive if you just made your points without the nasty attacks. I’ll leave it at that.

                                                                                                  2. 2

                                                                                                    networking for obvious reasons

                                                                                                    Them being what? Is the BSD socket API really the ultimate networking abstraction?

                                                                                                    1. 7

                                                                                                      The TCP/IP protocols were part of a UNIX. AT&T gave UNIX away for free. They spread together with early applications being built on UNIX. Anyone reusing the protocols or code will inherit some of what UNIX folks were doing. They were also the most mature networking stacks for that reason. It’s why re-using BSD stacks was popular among proprietary vendors. On top of the licensing.

                                                                                                      Edit: Tried to Google you a source talking about this. I found one that mentions it.

                                                                                        1. 4

                                                                                          I’m at MCE 2018. First time in Warsaw, I didn’t know Poland was such a warm country :)

                                                                                          1. 2

                                                                                            Enjoy Warsaw! The Vistula riverbank is a great place to chill after a long summer day :)

                                                                                          1. 4

                                                                                            Thought experiment: take the article at face value, namely the proposition that being a full-stack dev is impossible.

                                                                                            If this is true, then what does that say about us, having collectively participated in the development and adoption of a delivery and presentation mechanism that is so complicated that a single person cannot be expected to understand it all?

                                                                                            1. 4

                                                                                              Every time you add a new slightly-leaky abstraction to the pile, you get more productivity as long as you stay away from the leaks.

                                                                                              We’ve now built so many slightly-leaky abstractions that the job mostly consists of knowing how to avoid the leaky bits, since as long as you can do that you can build incredible things in a few hours.

                                                                                              1. 2

                                                                                                That’s a powerful image but not necessarily a failure. A single person probably couldn’t understand a whole railway network now, but today’s railway networks are more useful and more used than Richard Trevithick’s single locomotive pulling a single car on a single stretch of tramway.