Ron Evans: And thereâs always the opportunities, if somebody genuinely is like âWe want to take it in this wayâ, thereâs not a consensus for doing that; weâre taking it in our own way. They should do that, thatâs not a bad thing. Like, we donât have to all â if we reach a fork in the road, itâs not two brothers. This time, itâs actually a business decision about something or another.
[01:04:08.10] And I mean, TinyGo has grown into a very big thing in WebAssembly. It wasnât originally created to do that. That was an emergent property of the ecosystem. And one Iâm very glad for, and Iâm very involved with now myself. But the original vision with TinyGo was very specifically for small embedded devices, and bringing Go to the microcontroller. And then it just so happened âOh, we could actually compile this to WebAssembly.â There was some very nascent support in GigGo for WebAssembly at the time, and thatâs something that the LLVM toolchain that TinyGo was based on - not BigGo, but that TinyGo is based on. So itâs like âOh, this would be a cool feature to add. We should do that. No real specific, more just like âOh, itâs like a low-hanging fruit. Some people seem really interested in this. We should do it.â Next thing you know, âOh, wow⌠TinyGo is so much better for WebAssembly than BigGo.â And weâre like âWow, it is? How interesting! Why is it better? What does it do?â Like, we didnât even know ourselves some of it. We were just genuinely interested. It was an emergent property of the community, of a problem that they wanted to solve, that BigGo was not solving for them⌠So a bunch of people started devoting time and energy to improving that WebAssembly support in TinyGo. And then the WebAssembly system interface, which is WebAssembly on servers, and serverless⌠The WebAssembly not in the browser. You know, part of the fact that we were interested in it ourselves, that also we move a lot faster than BigGo. We can. We can innovate a lot more quickly. We havenât given a 1.0 guarantee yet, so we can change things⌠Weâre not â even though largely, I would say the Road to 1.0 for TinyGo is more about the hardware interfaces than it is about compatibility with Go itself. Because weâve had pretty good compatibility for a while. But it was very much an emergent property of the community.
And as more and more of us said âOh, wow, WebAssembly⌠Thatâs really a very interesting thing. We have some problems we wanna solve with thatâ, and Go being a really good language, for whatever, that this has been an aspect of TinyGo which was not something that was part of any master plan. Itâs something that the community wanted, that the community is, and does, and is not at all â thereâs no need for it to be a zero-sum game. Oh, it can either be for embedded or it can be for WebAssembly, or it could be for Linux, or for Windows, or for macOS - thatâs a false dichotomy. It could be for whatever we collectively want it to be for. But again, with that sort of curation in mind - like, you can share the park, but you canât just like go in and start digging it up to build your own little thing, when thatâs disturbing the flora and fauna of the ecosystem. And so thatâs in a compassionate, kind way⌠But also looking at like the why. Why is this person asking for this thing? Usually, itâs because they either have some need, or they canât figure out how to get the thing you have right now to do the thing that they want. Either way, thatâs kind of on you. If itâs a need they could solve some other way, you could recommend that. If itâs a thing that your software doesnât do yet, but that it could, you could mention that, and say âOh, maybe you can help.â Sometimes theyâre like âOh, I donât know enough programming.â Yeah, but they already took the project in a better direction just by saying âHmm, hereâs this thing that somebody might need.â
[01:08:19.28] WebAssembly again - a really great example. Thereâs a lot of people who are very involved in blockchain applications. Iâm not really one of them. I donât judge people for what they choose to do with their computational power. My currency is render graphics, play games, churn through large language models⌠This is on you, not on me. Iâm just trying to create technologies that are useful.
So thereâs a bunch of people who are using TinyGo specifically because they wanted to use WebAssembly as part of their engine for doing their processing⌠And so they were looking for basically what we call WebAssembly unknown, Wasm unknown, which is sort of a naked WebAssembly. Itâs WebAssembly with no expectations of what the running environment would be.
So for the listener, if you havenât checked out WebAssembly, first of all, do. Thereâs lots of interesting things happening. You can run it in your browser, you can run it on serverless applications like fermion spin, you could use it to build plugins for your current software, like Extism, or you could use it to actually run on microcontrollers and embedded devices with TinyGo and Meccanoid. So thereâs all sorts of different, interesting areas to do this in.
So this group of blockchain enthusiasts said âWe really want to run TinyGo with Wasm, with no external dependencies.â And the people who are doing Wasi are like âOh, that doesnât sound very usefulâ, just because it doesnât have any ability to call any specific thing. And these folks were like âOh, thatâs okay. We donât care. We have our own APIs.â So it took a while before it actually turned into something which landed in TinyGo, just because it had to build a little bit of a critical mass. Just one person wants it, just one or two, theyâre not willing to do any programming work on it, but theyâd like to have this feature⌠Okay, thatâs a signal of intent. Thereâs maybe other people. Is it useful for other things as well? Well, yes, as it turns out. That same pattern of Wasm unknown is exactly the pattern thatâs being used for Meccanoid, for running WebAssembly on embedded devices, like microcontrollers.
So if it was not for the blockchain community sort of priming the pump of starting to think about this, then those of us who are actually interested in using that same pattern for something completely different would not have maybe worked on it and adding it to TinyGo. So again, the community is defining what the thing is, because the purpose of TinyGo is to serve the communityâs needs. Itâs a means to their ends, whatever those happen to be.