• Dizzy Devil Ducky
    link
    fedilink
    English
    40
    edit-2
    9 months ago

    My personal favorite acronym like that definitely goes to AROS (Amiga Research Operating System) that if I remember correctly had to - for legal reasons - change the name. Rather than come up with a completely new name, went with AROS Research Operating System.

    Edit: name change was apparently to avoid any trademark issues with the Amiga name.

    • @[email protected]
      link
      fedilink
      39 months ago

      Some day when x86 is a thing no one has anymore, they’re going to put x86 emulation in wine and then it’ll actually be an emulator.

  • @[email protected]
    link
    fedilink
    99 months ago

    True is not cause it not emulating CPU/GPU of a different device, is more like a translator of sorts as it translates windows modules like directx and stuff in a way that Linux can interpret them and use them!

    • @[email protected]
      link
      fedilink
      49 months ago

      I’ve never worked with Haskell, but I’ve been meaning to expand my programming repertoire (particularly since I don’t get to do much coding at work, let alone learn new languages) and this makes for a nice opportunity, so I wanna try to parse this / guess at the syntax.

      I assume iterate function arg applies some function to arg repeatedly, presumably until some exit condition is met? Or does it simply create an infinite, lazily evaluated sequence?

      ( ) would be an inline function definition then, in this case returning the result of applying ++suffix to its argument (which other languages might phrase something like arg += suffix), thereby appending " Is Not an Emulator" to the function argument, which is initially “WINE”.

      So as a result, the code would produce an infinite recurring “WINE Is Not an Emulator Is Not an Emulator…” string. If evaluated eagerly, it would result in an OOM error (with tail recursion) or a stack overflow (without). If evaluated lazily, it would produce a lazy string, evaluated only as far as it is queried (by some equivalent of a head function reading the first X characters from it).

      How far off am I? What pieces am I missing?

      • ѕєχυαℓ ρσℓутσρє
        link
        fedilink
        2
        edit-2
        9 months ago

        You’re pretty much right on the money. In Haskell, a String is a type synonym for [Char], so we can use the list concatenation function ++ to join strings. ++ is an infix function i.e. [1,2,3] ++ [3,4,5] = [1,2,3,3,4,5] (which will be equivalent to doing (++) [1,2,3] [3,4,5] by virtue of how infix functions work in Haskell). When we do (++ "a"), we create a partially applied function. Now, we can supply another string to it and it will add "a" at the end of it.

        iterate f x produces a lazily evaluated sequence [x, f x, f f x, ...]. So, to get the nth entry, we can do wine !! n where we use another infix function !!. With partial application, we can modify the definition of wine to create a function that takes an Int n and spits out the nth entry of it by doing

        wine = (!!) $ iterate (++" Is Not an Emulator") "WINE"
        

        We needed to wrap the !! inside parentheses because it’s an infix function. $ just changes the order of application. (IIRC, it’s the least significant function.) You can think that we’re wrapping whatever’s on the right of the $ by parentheses. Now we can do wine 2 instead of wine !! 2 to get "WINE Is Not an Emulator Is Not an Emulator".

        I’m by no means a Haskell expert. (I’m not even a professional programmer lol.) So, if someone would like to add some more details, they’re more than welcome.

        Edit: A much more readable version might be

        wine 0 = "WINE"
        wine n = wine (n-1) ++ " Is Not an Emulator"
        
        • @[email protected]
          link
          fedilink
          29 months ago

          [The list concatenation function] ++ is an infix function i.e. [1,2,3] ++ [3,4,5] = [1,2,3,3,4,5] (which will be equivalent to doing (++) [1,2,3] [3,4,5] by virtue of how infix functions work in Haskell).

          I think that’s the part I was most confused by. I’m coming mostly from Java and C, where ++ would be the unary operator to increment a number. I would have expected that symbol in a functional language context to be a shorthand for + 1. The idea of it being an infix function didn’t occur to me.

          Partial applications I remember from a class on Clojure I took years ago, but as far as I remember, the functions always had to come first in any given expression. Also, I believe partial fills the arguments from the left, so to add a suffix, I’d have to use a reversed str function. At that point, it would probably be more idiomatic to just create an inline function to suffix it. So if my distant recollection doesn’t fail me, the Clojure equivalent of that partial function would be #(str % " Is Not an Emulator").

          iterate works the same though, I think, so the whole expression would be (def wine (iterate #(str % " Is Not an Emulator") "WINE") )

          This code was typed on a mobile phone in a quick break based off of years-old memories, so there might be errors, and given it was a single class without ever actually applying it to any problems, I have no real sense for how idiomatic it really is. I’ll gladly take any corrections.

          NGL though, that last, readable version is sexy as hell.

  • don
    link
    fedilink
    109 months ago

    GNU Hurd.

    It’s time [to] explain the meaning of “Hurd”. “Hurd” stands for “Hird of Unix-Replacing Daemons”. And, then, “Hird” stands for “Hurd of Interfaces Representing Depth”. We have here, to my knowledge, the first software to be named by a pair of mutually recursive acronyms.

    – Thomas (then Michael) Bushnell

    • @[email protected]
      link
      fedilink
      239 months ago

      Not really. It is just translating the Windows system API calls into Linux system API calls. It’s not emulating Windows, it’s an entirely different implementation that doesn’t necessarily match that of Microsoft’s implementation. It had it own workarounds to make buggy code work.

      You wouldn’t call a Java Virtual Machine an emulator of another JVM either, they’re just different implementations of the same specification.

      • @[email protected]
        link
        fedilink
        English
        109 months ago

        Thing is, I do kind of think of a JVM as an emulator for a processor that doesn’t exist.

        WINE kind of blurs the line of a traditional emulator by having the executable run natively on the target machine’s CPU, but everything it does in regards to dealing with the host OS, the display, disk access, etc, is emulated as far as I’m aware.

        A theoretical PS4 or Xbox One emulator running on x86 hardware could be just as much of an emulator as WINE is.

        • @[email protected]
          link
          fedilink
          29 months ago

          Maybe depending on how far you take it. A CPU instruction is different from hardware to hardware, but a function signature would stay the same no matter the underlying architecture. If we want to go through that logic then an interpreter can be thought of as a form of emulator.

        • @[email protected]
          link
          fedilink
          39 months ago

          Yes but an emulator emulates both the CPU and GPU of the consoles and in the case of PS4 even thought the CPU is x86 the biggest difference I can think of is the GPU drivers.

    • @[email protected]
      link
      fedilink
      English
      1
      edit-2
      9 months ago

      Quick Emulator

      (At least it was when it was written. Rosetta blows it out of the water.)

        • @[email protected]
          link
          fedilink
          English
          19 months ago

          Apple’s x86->ARM transpiler

          (It accomplishes this by “cheating” and turning on a feature only found in Apple Silicon that make concurrent memory access rules more similar to x86, but still)

            • @[email protected]
              link
              fedilink
              English
              19 months ago

              Qemu is an emulator designed to allow you to run software for one architecture on another, much like Rosetta does. Qemu has gained the ability to run native virtual machines using hardware virtualization, which it does astonishingly well, but its original purpose is emulation. In terms of quickness, though, more modern offerings run circles around it

              • Possibly linux
                link
                fedilink
                English
                19 months ago

                Do you have benchmarks to confirm that hardware accelerated virtualization on qemu is slow? It is what powers a lot of things including hypervisors like Proxmox. It also supports hyper-v acceleration. As far as Apple is concerned no one is really running a Mac so that isn’t a useful comparison.

                • @[email protected]
                  link
                  fedilink
                  English
                  19 months ago

                  I didn’t say hardware accelerated virtualization on qemu was slow. In fact, it’s one of the best performing hypervisors out there. When used as an emulator, however, its performance leaves something to be desired.

    • @[email protected]
      link
      fedilink
      259 months ago

      It’s a cheeky play on “WINdows Emulator” as well as “WINE’s Is Not an Emulator”, but I think for both legal (trademark) and logistical (it really isn’t an emulator) reasons, you’ll never officially see that bit sanctioned

    • @[email protected]
      link
      fedilink
      English
      79 months ago

      Pine was already taken by an email reader. One of the early ascii email readers was called elm, for ELectronic Mail. Pine was made after elm and it stands for Pine Is Not Elm.

      • skulblaka
        link
        fedilink
        49 months ago

        I’m starting to get the impression that most software older than me is defined more by what it isn’t than by what it is.

    • @[email protected]
      link
      fedilink
      English
      13
      edit-2
      9 months ago

      But I thought LAME Ain’t an MP3 Encoder?!

      Actually I never got that. WINE isn’t an emulator, but LAME very much is an MP3 encoder

          • @[email protected]
            link
            fedilink
            29 months ago

            “The Democratic People’s Republic of Korea is neither Democratic, nor the people’s, nor a republic.”

            • Voltaire