Settings

Theme

Spin 2.0 – open-source tool for building and running WASM apps

fermyon.com

188 points by acifani 2 years ago · 37 comments

Reader

matei_radu 2 years ago

Hi, everyone, I'm one of the Spin maintainers.

We're really excited about the new release, happy to answer questions about it!

  • rockwotj 2 years ago

    Congrats on the release!

    Question how did you come up with your the languages you support. Obviously how well the language compiles to Wasi is a factor, but how did you end up picking C# for instance?

    Additionally how does Javascript support work? Are you embedding QuickJS?

    • matei_radu 2 years ago

      Thank you!

      To your point, the primary consideration for choosing the languages is their support for WebAssembly, and WASI in particular.

      Due to Spin's heavy use of WASI and the component model, languages that have first party support in the WIT bindings generator (https://github.com/bytecodealliance/wit-bindgen) are the easiest to implement, followed by languages that can be built on top of the support for those with first party support.

      For example, the JavaScript support is built by embedding QuickJS (in particular, Shopify's Javy project — https://github.com/fermyon/spin-js-sdk), which then uses the Rust SDK. (As a side note for the JS support — adapting QuickJS has been extremely helpful in getting JS support out; however, we are in the process of rebuilding the JS runtime using SpiderMonkey (with which a few people on the team have significant experience) and JCO (https://github.com/bytecodealliance/jco), and the web platform compatibility makes it a significantly better proposition for things like 3rd party dependencies).

      C# is an interesting one — the .NET team at Microsoft (and in particular Steve Sanderson from that team) has been making tremendous progress in ahead-of-time compilation for .NET and generating Wasm and WASI compatible binaries (as opposed to their initial approach on Blazor), and experimenting with that led us to build support for Spin as well.

      Finally, we do a lot to support other popular languages and their Wasm support — two examples: Python (https://github.com/bytecodealliance/componentize-py) and Java / TeaVM (https://github.com/fermyon/teavm-wasi), for which we haven't fully integrated Spin support, but we hope to get there soon.

      I hope this explains a bit our process on language support, happy to expand on any point here. Enjoy your weekend!

      • rockwotj 2 years ago

        I'm impressed you're already leveraging the component model. I thought it wasn't quite ready for primetime yet, but it seems you're proving that wrong... I'll have to dig in more here, as I'm working embedding WebAssembly in a high performance storage engine.

        Thanks for the notes! I hear you on QuickJS - I've seen approaches of folks trying to build more node compatibility on top of quickjs (ala https://github.com/second-state/wasmedge-quickjs), but have recently heard about spidermonkey in wasmtime. Do you have intuition for nodejs vs browser in terms of what people want in terms of compatibility?

      • konsoletyper 2 years ago

        Why you guys keep using this old non-maintained fork of TeaVM, while there's WASI support in main TeaVM (https://github.com/konsoletyper/teavm)?

      • evntdrvn 2 years ago

        yeah Steve Sanderson is a force :)

  • tipiirai 2 years ago

    Congrats on the release! Any example sites where Spin is in active use?

    • matei_radu 2 years ago

      Thank you!

      (disclaimer: I work at Fermyon, the company that created Spin.)

      All of Fermyon's websites are powered by Spin, and there are quite a few users who are deploying their Spin applications to Fermyon Cloud.

  • tete 2 years ago

    While you advertise it as portable in the introduction the install guide only mentions "Linux (amd64 and arm64), macOS (Intel and Apple Silicon), and Windows (amd64)".

    What are your plans on supporting more operating systems and architectures?

    • matei_radu 2 years ago

      Thanks for the question!

      Spin could definitely run in more places than what we have pre-built binaries for. Specifically, we could run on all platforms Wasmtime supports today (https://github.com/bytecodealliance/wasmtime/releases/tag/v1...), including RISC and S390X, for example.

      And while we have been experimenting a bit with running Spin on RISC, we haven't really had the bandwidth or requirement to build a production build for those yet.

      Are you interested in a specific operating system or CPU architecture? Would love to understand your scenario.

  • neophyt3 2 years ago

    Hi Matei_Radu, Is it possible for spin to support actor-model pattern for eg. can it run long running process to execute trading strategies which will accept tick data every second

    • matei_radu 2 years ago

      Hey, thanks for the question!

      The short answer right now is no. The behavior of the default (and most popular) trigger in Spin (the HTTP trigger) is to create a new instance for handling each incoming request. We made that choice primarily because we want to leverage the really good startup times for Wasm (and in particular for Wasmtime), and not running any guest code (in this case, business logic) until there is an actual incoming request means the server can execute other applications while idle.

      Now, HTTP workloads are not the only type of workloads that Spin can handle — because of the way it's built, it's entirely pluggable and you can build your own trigger (for example https://github.com/fermyon/spin-trigger-sqs), and potentially have long-running processes, but that is not currently possible with Spin today.

    • gdamjan1 2 years ago
  • jedisct1 2 years ago

    How to use Spin with Zig?

luismedel 2 years ago

I still have to try wasm, but I see the main focus seems to be on cloud and edge deployments.

What I'd really like would be to program a game in C (or classic Turbo Pascal) and have a way to run it "hosted" in a iOS, Android or <whatever platform> native app. Is that possible nowadays?

_a_a_a_ 2 years ago

Ahem? "Spin is a widely used open-source software verification tool"

and it's been around a long time

"The tool was developed at Bell Labs in the Unix group of the Computing Sciences Research Center, starting in 1980, and has been available freely since 1991"

http://spinroot.com/

  • 9dev 2 years ago

    I wonder if we’re at a point where it doesn’t really make sense anymore to insist on unique names. Most of the good ones have been used by now; and this likely won’t get better as more time passes.

    • slimsag 2 years ago

      It's a solved problem, and it's called trademark law / a wordmark.

      • 9dev 2 years ago

        Well it’s certainly not solved by trademark law for me, a lowly software engineer, trying to pick a rememberable name for my open source project that’ll maybe grow into something bigger someday.

      • rubyfan 2 years ago

        If you’ve been through the process of naming something that is safe for trademark purposes then you might think we’re beyond unique names for things. We’re out of options.

  • theamory 2 years ago

    Ha, naming is tough! At least it's not named Atlas :)

    • notum 2 years ago

      Allow me to introduce you to Watergate, our new dam simulation platform.

jtflynnz 2 years ago

Very intriguing, great work and thanks for sharing!

jokoon 2 years ago

how can I call a js function from wasm?

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection