1. 40

Video link to Vermona being presented

slides

  1.  

  2. 29

    I watched the video last night, and the title is apparently wrong.

    It’s not a Rust-based programming language. It’s a new language with Rust-like ownership (but more coarse-grained than the object level) and application compartmentalization for legacy code.

    It’s designed to allow incremental upgrading of legacy code, which makes a ton of sense because Microsoft has millions of millions of lines of it.

    But this also makes sense for the open source ecosystem, which suffers from a lack of maintainers.

    I mentioned that “securing legacy codebases” is in some ways a better framing than “memory safety” here: https://lobste.rs/s/yttj7j/memory_safety_research_agenda#c_7n8idu

    I will look at this when it comes out… It sounds early, but if they provide a way to incrementally upgrade old code, that would be amazing. That is, it would be great to secure Python, PHP, Erlang, Apache, Nginx, sqlite, coreutils, Firefox, etc. without rewriting them entirely in another language!


    They mentioned CHERI: https://www.cl.cam.ac.uk/research/security/ctsrd/cheri/

    Although that apparently relies on hardware, which doesn’t seem deployable.

    While it was light on details, I think they’re on the right track.

    1. 3

      I haven’t watched the video yet, but I have been mulling a version of cmake that targets Wasi and compartmentalizes legacy C/C++ codebases into a Wasm container while providing easy hooks to extend the system with Rust. It wouldn’t automatically configure protection domains between submodules, but it would it make it much much easier.

      Eventually, I’d like to see a tool where you could carve say a Redis process into networking, disk and memory. If one could determine those boundaries from watching execution traces, all the better. Bonus points for having a capabilities overseer running in realtime, but that would require dynamic recompilation.

      1. 1

        I’m sure somebody recently announced an ARM core with Cheri built in… But I can’t seem to scrounge up a link :(

        1. 2
      2. 8

        Oh cool, a new language from Microsoft that helps us write correct code.

        Throws Verona on the pile with P, P#, IVy, Dafny, F*, Midori, Koka, and Lean

        (I kid, I kid. Microsoft does a lot of great work in this field, but a lot of their experiments end up not working out.)

        1. 10

          But you have a point nevertheless…

          • PHP -> Asp
          • Java -> C#
          • JVM -> .net
          • Google -> Bing
          • /your/filesystem/path -> \your\filesystem\path (hehe, I know, I know… but it’s funny)
          • netscape -> explorer
          • ODF -> OOXML
          • {Your functional} -> F# …
          • Rust -> Ver[m]ona

          EDIT (I almost forgot)

          • GNU Linux -> WSL

          It’s just the Microsoft way

          1. 2

            Huh. Never thought about it before but does Microsoft (research) have a Lisp?

            1. 8

              As a matter of fact, yes! Microsoft Lisp was a LISP interpreter in the 1980s for DOS.

              As I recall, it was slower than BASIC, had a terrible editor, and was missing basic stuff like being able to parse 'x as (quote x)

            2. 1

              I think ASP (1996) predates PHP (1997).

              Both were ultimately a really bad idea though.

              1. 11

                PHP was a genius idea in its time, because it enabled extremely cheap shared hosting.

                If you had a low-traffic site, your options around 2002 were either a PHP host for under $5/mo, or the cheapest available colocated host at around $200/mo.

                It wasn’t a better language, but it was a much better setup experience with a smoother on-ramp that cost less to host (which echoes, to me, modern criticisms of golang).

                1. 3

                  PHP/FI first appeared in 1994/1995, and although the “FI” part bears little resemblance to the “modern” PHP3 that showed up in 1997 (of which I think it’s fair to say PHP7 has much more in common with than PHP/FI), several critical ideas showed up here that undoubtedly influenced the design and development ASP.

                  1. 1

                    ASP was a good idea (glue to stick together existing application code and render its output to the web) that everybody ignored and just tried to create entire applications with. It was never meant to do that, which is why it was so terrible at doing so for the first 5 or so years of its life

                    1. 1

                      Why were they bad ideas?

                  2. 5

                    What’s the definition of “working out” ? P looks like it’s still active:

                    https://github.com/p-org/P

                    I remember it had this success story but I don’t know the details very well. I’m not a Windows user so I haven’t been motivated to look.

                    https://blogs.msdn.microsoft.com/b8/2011/08/22/building-robust-usb-3-0-support/

                    It sounds like this Verona project is very early, but I think they framed the problem “right”. I would like something like Rust that works better with legacy code. Rewriting code for only of security purposes (as opposed to functionality) is a waste and splits the ecosystem / developer effort. It’s the most expensive way to achieve that goal.

                    And empirically speaking I don’t think it happens… People talk about it but don’t do it on major systems because of the effort involved. (e.g. speaking as someone who has been “rewriting” bash for nearly 4 years, with Oil. Of course Oil isn’t motivated only by security..)

                    For example, I would be surprised if Firefox is >90% Rust within 10 years. Or even 20 years. It makes more sense to split the application up and rewrite certain parts of it in a safe language. That is, follow the Verona strategy (if it is feasible, which is a big “if”, and something that’s a worthy target of research).

                    1. 1

                      Re P. From Microsoft’s site:

                      “P got its start in Microsoft software development when it was used to ship the USB 3.0 drivers in Windows 8.1 and Windows Phone. These drivers handle one of the most important peripherals in the Windows ecosystem and run on hundreds of millions of devices today. P enabled the detection and debugging of hundreds of race conditions and Heisenbugs early on in the design of the drivers, and is now extensively used for driver development in Windows.”

                    2. 1

                      Don’t forget about Spec# and Sing#

                      1. 1

                        My understanding is that F* code (EverCrypt in particular) shipped in Windows kernel.

                      2. 2

                        It’s Verona, not Vermona.

                        1. 1

                          Verona is a city in Italy, “vermone” means “big worm”

                          1. 1

                            Veromona is Vermone’s wife.

                            1. 6

                              And Vermione is their daughter. She’s a talented programmer and has recently been accepted into an elite boarding school to hone her skills.

                          2. 1

                            Thanks, too much drum machine on my mind