The Changelog: Software Development, Open Source - Go is eating the world of software (Interview)

Episode Date: July 25, 2019

We're joined by Ron Evans at OSCON on the expo hall floor talking about Go and how it's eating the world of software. Specifically we're talking about TinyGo and what they're doing to bring the Go pro...gramming language to micro-controllers and modern web browsers. According to Ron Evans, "embedded systems and Go are the most exciting things happening right now."

Transcript
Discussion (0)
Starting point is 00:00:00 Bandwidth for ChangeLog is provided by Fastly. Learn more at Fastly.com. We move fast and fix things here at ChangeLog because of Rollbar. Check them out at Rollbar.com. And we're hosted on Linode cloud servers. Head to Linode.com slash ChangeLog. This episode is brought to you by DigitalOcean, the simplest cloud platform out there. And we're excited to share they now offer dedicated virtual droplets.
Starting point is 00:00:28 And unlike standard droplets, which use shared virtual CPU threads, their two performance plans, general purpose and CPU optimized, they have dedicated virtual CPU threads. This translates to higher performance and increased consistency during CPU intensive processes. So if you have build boxes, CI, CD, video encoding, machine learning, ad serving, game servers, databases, batch processing, data mining, application servers, or active front-end web servers that need to be full-duty CPU all day, every day, then check out DigitalOcean's dedicated virtual CPU droplets. Pricing is very competitive, starting at $40 a month. Learn more.
Starting point is 00:01:01 Get started for free with a $50 credit at do.co slash changelog. Again, do.co slash changelog. From Changelog Media, you're listening to The Changelog, a podcast featuring the hackers, the leaders, and the innovators of software development. I'm Adam Stachowiak, Editor-in-Chief here at Changelog. On today's show, we're at the Expo Hall floor of OzCon talking with Ron Evans. We're talking with Ron about Go and how it's eating the world of software. Specifically, we talk about TinyGo and what they're doing to bring the Go programming
Starting point is 00:01:40 language to microcontrollers and modern web browsers. It's been more than a five-year mission, actually, to seek out new life and new civilizations. I don't know if we're boldly going. We're more like creeping up timidly. You're getting close to boldness. Yeah. You're getting more bold. You come out from underneath your bunker.
Starting point is 00:02:04 Yeah, this is my first time out in a while from the workshop. I ensconced myself after Embedded World in March in Nuremberg, Germany. Great conference for Embedded. That was the first public appearance of GopherBot. And so I went around the whole appearance of GopherBot. And so I went around the whole conference with GopherBot. And it's amazing how a conference full of blinking LEDs and robots and stuff will literally stop in its tracks when they see a cute robotic gopher plushie. So it was a pretty big hit, huh? It really was, surprisingly.
Starting point is 00:02:46 I mean, I thought it was cool, but I thought it was weird. Yeah. It's like an intention-getting device, you know, but in the form of a robot. I didn't even realize my battery died, but these things get so much attention. And they're just marquees. That's got to be even more so. Well, also, this is actually very programmable. So all the software is also open source.
Starting point is 00:03:09 I just put the GitHub repo public, so it has all the tiny Go code, which is fairly high level. I mean, we were trying to create an API that people who are not really Go programmers could still decipher and use to program this device. You know, basically, you know, antenna.blink. And so you could say go antenna.blink, and it just launches a Go routine with the blinking antenna, and so it just keeps blinking while you do your other things. I mean, that's the big benefit of using Go, is its concurrency.
Starting point is 00:03:43 So if your Go is not concurrent, you know, why use Go? I mean, it's still nice, but this is a big part of Go's... Appeal. Well, the brevity of the language, the fact that there's very little to it as far as number of keywords. Right. That's really great when you're writing a compiler because it means there's less things that could go wrong, less misinterpretations, less ways to compile code.
Starting point is 00:04:10 And TinyGo has a lot of work to do in order to take the Go SSA code. Well, the way TinyGo works, just TinyGo takes your text code, your regular Go, and it uses the Go standard libraries, which themselves are written in Go, to take and convert that to single static assignment form, or SSA form. So normal Go at that point takes the SSA and compiles it to the binary code. This is where TinyGo kicks in and says, let's convert that SSA form instead to LLVM's intermediate representation. So LLVM is a framework for writing compilers. It's being used by a few languages people might have heard of, like Swift, or another
Starting point is 00:04:58 little language that is getting a lot of attention called Rust, and a bunch of other cool languages, a new one called Zig, which looks pretty interesting for WebAssembly, and many other languages in TinyGo as well. So we take and we can then target whatever one of the LLVM backends, of which there are many, of which many of them are very, very small chips,
Starting point is 00:05:21 microcontrollers, like the ARM Cortex M0 or M4, which are types of chips that Go could never run on. They only have maybe 256K of memory total. And the Go program is, Hello World is 1.1 megabyte. So there's a gigantic disconnect about what you could even fit on the chip let alone that it's not designed for that processor architecture and there's no operating system
Starting point is 00:05:51 on most microcontrollers. They just run bare metal. Right. So there was literally no possible way Go could run in this environment until my colleague IK Van Lattem he's actually the creator of TinyGo I'm like the first follower.
Starting point is 00:06:06 Never mind those 10K lines of code I wrote. I'm a good follower. I'm a good follower. But he's the creator of TinyGo originally, and I discovered it through, I don't even remember. It may have been through Golang Weekly, or just somehow it popped up through the internets into my attention.
Starting point is 00:06:27 I took one look, and I got very excited. I mean, I've been wanting to do this for five years. I could never convince anyone to help me. And here this single individual has already done substantial amount of the heavy lifting. So we have a team of four official members. We have 25 other contributors, I believe, now. But IK handles the compiler heavy lifting. I'm sort of responsible for the hardware peripheral interfaces, and I'm spokesmodel for the group. So I do a lot of the talks and promotion and just generally, you just generally yell for attention.
Starting point is 00:07:07 Then Johan Brandhurst does a lot of amazing work with TinyGo and WebAssembly. Justin Clift is also doing amazing work, even though he's not an official member of the organization yet. If you're listening to this, I just haven't gotten around to sending you an email because I know you've been busy. And then Conejo Ninja, a.k.a. Daniel Esteban, who is also Spanish, who has basically been doing all of the amazing work with all of the displays.
Starting point is 00:07:38 And then we have a lot of other contributors who have been, I mean, we have over 200 people on our Slack channel now. It's sort of taking off by leaps and bounds and that really segued nicely to the big announcements we made yesterday here at OSCON. So we had big three huge things that came out yesterday. We thought OSCON was a great place for us to launch these things just sort of it's the center of of the legitimate open-source world if you will, in the U.S. So the first one is TinyGo powered by Arduino.
Starting point is 00:08:09 So we've been developing a very special relationship with Arduino. I mean, they're the pioneers of open source hardware. They're a really cool company. You know, Arduino is love, they say, and they really mean it. I mean, they've been incredibly helpful to us. So we have TinyGo running on the new Arduino Nano 33 IoT chip. So that particular board is really interesting because it has both a microcontroller as well as a separate Wi-Fi chip.
Starting point is 00:08:36 So it's really geared up for the Internet of Things. If you don't have Internet, it's just a thing. It's not an Internet of Things. Internet thing? something like that. Right. So people ask, that means you can run the net package on TinyGo? No, not yet. However, since all of the net package is implemented in the form of interfaces, we can implement our own version of those interfaces designed
Starting point is 00:09:06 specifically to communicate with the serial interface with this Wi-Fi chip. So it's the same code. You just say, you know, package net. In this case, it's the net package that's part of our driver for the Wi-Fi chip. And then you can do, you know, net.dialTC, or net.dial. You know, we support both TCP and UDP connections. And because of this, we were able to implement the same interfaces as the Paho MQTT client. That's the official MQTT client from the Eclipse Foundation, which is used whenever you want to talk to an MQTT
Starting point is 00:09:45 machine-to-machine messaging broker from Go. Okay. So it's the same interface. So you take your regular Go code that you've been using on your embedded Linux, and you copy and paste it into your new code that you're writing for your microcontroller, you know, change a few things, you know, based on your authentication, and it just works. So it's a secure connection from your chip, from your Arduino Nano 33 IoT chip, to your secure messaging broker
Starting point is 00:10:11 and whatever cloud service you're using. That is table stakes for the Internet of Things. If you don't have that, you're not ready. So that was sort of our, here we are. So you're ready for IoT. We're ready for our close-up, Mr. DeMille. So the other two announcements were the future, the future's future. So the second one is the TinyGo Playground.
Starting point is 00:10:34 Okay. So the TinyGo Playground is like the Go Playground. It's a website. You can find it at play.tinygo.org. And if you look at it, it looks very much like the Go Playground. It's a web page that you can enter in the left pane your Go code, and in the right pane you see the console output. But it's using TinyGo.
Starting point is 00:10:55 The interesting part is we also support using our hardware boards simulated within this web browser. So you write your TinyGo code on the left pane, and it actually is compiling to WebAssembly, which is then executing against the simulator in the browser itself. So when you see the little JavaScript LEDs blinking, it's because your WebAssembly code is talking to this simulator in the browser to make them blink. That's cool.
Starting point is 00:11:23 And you can click on the flash button, and it downloads the hex file that you can flash right onto the real hardware. It's the actual binary for your code. Wow. That's cool. So then the third thing, which is related to the second thing.
Starting point is 00:11:38 So a lot of people have been getting very excited about RISC-V. So for anyone who hasn't heard about RISC-V or doesn't know what it is, just because in the flurry of buzzwords that I tend to pontificate, it's hard to keep track of the acronyms, especially when there's like four-letter acronym
Starting point is 00:11:56 plus a number. So RISC-V does for processors what open-source software has done for the rest of the open source world. It actually provides open source instruction set and hardware reference platforms. So if you want to build a processor, you don't have to ask Intel, please build a processor that you'll sell me or go to ARM and say, please let me license this for a lot of money so I can build them.
Starting point is 00:12:26 You know, those are both really good options, and they've worked quite well. But there's a new, you know, third option, which is very exciting to me because, you know, we're really at the first steps of a Cambrian explosion of unique silicon that does very efficient things for, you know for processing deep learning models or other types of parallel processing where doing some silicon optimization can result in a substantially better amount of computation per watt. So the reason why I care about that is for two reasons. The first one is battery life. You know, if we're talking about
Starting point is 00:13:06 edge devices, you know, we need to save on batteries. And the other one is we need to start using so much electricity in the world. Like we need to reduce our power consumption just so that we can preserve resources, right? Like the external costs of burning carbon for a data center are not measured in your cost. I saw Searles the other day. He posted one of his provocative tweets, as he tends to do. Great guy. It was, has anyone done a calculation of the carbon cost of your continuous integration servers? And like dead silence on the Internet.
Starting point is 00:13:44 It's like, oh, you just pulled the covers back and we don't like how we look right now. Don't answer that question. Right. I think about that a lot, just because I think, you can't leave the lights on all the time where I come from, the electrical bills
Starting point is 00:14:00 are a lot more expensive. Anyway, RISC-V is a really important new technology and we just announced experimental support Electrical bills are a lot more expensive. Anyway, RISC-V is a really important new technology. And we just announced experimental support for RISC-V in TinyGo. So you can compile for the Sci-5. It's one of the companies that's manufacturing silicon based on this. They have a reference board called the Hi-5-1. It's super hard to come by because the crowdfunding just finished. And you didn't order from that. You have to wait for their first production run, I think. But it's actually a
Starting point is 00:14:30 microcontroller board based on RISC-V. So we have experimental support in TinyGo for this board, and it's also in the TinyGo Playground. So if you go to the TinyGo Playground and you click on the dropdown to choose the Hi5.1, it's simulating that. And if you go to the TinyGo Playground and you click on the drop-down to choose the Hi5-1, it's simulating that, and if you click on the flash button, you download the hex file with the RISC-V code you can flash on your board. So it's basically next year's demonstration,
Starting point is 00:14:55 but it's today, and it's all in our public repos right now. You're welcome. Thank you very much, Ron. We haven't left the lab that much over the last few months. We've been kind of busy. You guys have been busy. This is the first you've really gotten out, and you've been in the cave working hard.
Starting point is 00:15:13 For how long now? The last conference I went to was in March. And, well, it's not just me. I mean, there's a lot of contributors, you know, all the members I mentioned, and a bunch of other contributors as well. This is very much a collective effort. There's no way any one person can do anything really important. It's a room full of geniuses, and I'm just really excited to be a part of the jam session.
Starting point is 00:15:40 I have my role. I do my part. I try. I try. But yeah, it's very much a collective effort, and it's been growing by leaps and bounds. The number of people that want to do WebAssembly is fairly substantial. It's a very exciting new technology. But the ways to actually go about doing it right now are very, very difficult. You can write C++
Starting point is 00:16:07 code and then compile it using something like mscripten. If you already know C++, that's perfect I guess for you. You can use Rust. A lot of people are learning Rust and discovering it's a very hard language to learn and to use. It does a lot of things for you, but it's non-trivial. You're not going to just knock off a quick little WebAssembly app in Rust without knowing what you're doing. You actually have to learn the language to use it. True with many languages. You can only fake your way around so far.
Starting point is 00:16:40 So Go, the main Go implementation, the MGI, if you will, you can compile to WebAssembly. The MGI. And there's a couple of issues. One of them is that the actual executable file is quite large. Just because Go is big. You know, I mean, hello world in Go. This is how I open my talk. Hello world in Go is about 1.1 megabytes.
Starting point is 00:17:09 And Hello World and Tiny Go is 12K. Yeah. 1.1 megabytes versus 12K. Does the crowd erupt in cheer? At this point, people are like stunned. Silence. They're not really sure. Does he speak English properly?
Starting point is 00:17:28 Is he dyslexic? Both of those things, but I did not make an error in that number. It is two orders of magnitude smaller in terms of size of executable. In fact, there was a really great blog post written by not one of our team members, but a very cool collaborator. I'm sorry I forgot this person's name, but the title of the blog post was using Go for WebAssembly and then compressing it down to a 16K file using TinyGo. He had me at that point. A 16K file using TinyGo.
Starting point is 00:18:02 I'm in awe. But they were able to, using our code that's on the public internets, take an application that they had written using Web Assembly, compile it down to this ridiculously small size. Well, it gets better. It actually gets better. So someone else then did some WebGL experiments. I think it was Justin Clift. And using the WebGL interface from the JavaScript bridge from WebAssembly, they discovered that TinyGo is actually 80% faster than the main Go implementation as well. Probably because we're using the LLVM compiler tool chain, and between Clang and LDD, which is the LLVM linker,
Starting point is 00:18:54 it's getting rid of a lot of stuff. I mean, it's an unfair comparison just because we're a speedboat and they're a battleship. Of course we're going to win. If you want a cigarette boat race and you you know, an oil tanker is not the way you win. Or a canoe. Or a canoe. You need a boat with a motor. You know, a good motor. Okay, canoes
Starting point is 00:19:14 have no motors. Not often at least. Canoe is good for stealth, but not really for speed. I did a lot of canoeing as a kid in Wisconsin. Of course. It's also good for relaxation and enjoyment. Some would say that. Some would say. At least one. It's good for relaxation like the first few miles
Starting point is 00:19:29 and then it's like my arms hurt. How many more miles down river? 15? Got it. Can we stop here? This is my last summer canoeing with my son. If you have a good enough current, you don't have to work that hard, right? You do if you ever want to get there in time for the water.
Starting point is 00:19:46 Okay. I didn't know we had scheduled events. This episode is brought to you by GoCD. With native integrations for Kubernetes and a Helm chart to quickly get started, GoCD is an easy choice for cloud-native teams. With GoCD running on Kubernetes, you define your build workflow and let GoCD provision and scale build infrastructure on the fly for you. GoCD installs as a Kubernetes native application, which allows for ease of operations, easily upgrade and maintain GoCD using Helm, scale your build infrastructure elastically with a new Elastic agent that uses Kubernetes conventions to dynamically scale GoCD agents. GoCD also has
Starting point is 00:20:36 first-class integration with Docker registries, easily compose, track, and visualize deployments on Kubernetes. Learn more and get started at gocd.org slash Kubernetes. Again, gocd.org slash Kubernetes. So you had next year's demo today. Dream with us a little bit. I think you're pretty good looking down a few years and dreaming, Ron. Five years from now, whatever the time frame you pick, let's just assume TinyGo does all the things that it set out to do
Starting point is 00:21:19 in terms of IoT and whatever you think is success. Like what's happened five years from now, or three, whatever makes sense, in the tiny Go world or in the embedded space or in IoT? What does success look like if it just continues apace? Well, I think it was Chris Dixon who said, no, no, it was Mark Anderson who said, software's eating the world.
Starting point is 00:21:43 Yeah. And so I'll add to that. who said software is eating the world. Yeah. And so I'll add to that. So if software is eating the world, then Go is eating the world of software. You know, there was a blog post that came out saying Go was the new Java. What they meant by that was Go is the industrial strength technology that large mission-critical organizations can rely upon to, you know, keep service levels up, try not to kill anybody by accident,
Starting point is 00:22:12 by failing at the wrong times, you know, for things that really, really matter. Yeah. You know, I think a lot of people tend to poo-poo Java, and that's a real mistake. You know, the JVM is either the number one or the number two most engineered piece of software in human history. You know, the other one being Beam, the Erlang VM. So, I mean, you really have to give incredible respect to the number of human hours devoted to taking seriously making this piece of software.
Starting point is 00:22:42 Yeah. seriously making this piece of software. So to say that Go is even in this very small, refined circle of reliability to me is extraordinary. I did a lot of work for AT&T a number of years ago, and carrier grade, carrier grade is what is above enterprise grade, right? Enterprise grade, yeah that's nice, that's like for consumer products. Carrier grade, what is above enterprise grade. Right? Enterprise grade, yeah, that's nice. You know, that's like for consumer products. Carrier grade, that's like for maintaining the infrastructure of our entire continent.
Starting point is 00:23:10 Right. Right. So the fact that we can say that Go is in this circle, very small circle, is very exciting. So big companies would like, or small companies, any company, you want to reduce the number of programming languages you have in use just to reduce the cognitive friction of your ability to maintain all these systems. I mean, any interesting system, the half-life is going to be like five years long. Yeah. Especially when physical plants, you know, you install something at a physical plant in a factory or a retail store, and you say, yeah, it has to be replaced in three years. You go back there in 10 years, it's still there working.
Starting point is 00:23:48 Like, oh, yeah, it was still working. We didn't fix it. We didn't replace it. And they're like, oh, we said it only had a three-year lifespan. Like, oh, wow, really? We didn't know. It's still working. This is just very common in these type of physical locations
Starting point is 00:24:00 because replacement is not easy. Really, software upgrades are even hard enough. So you say we need something that's going to be reliable enough and solid enough, and Go as a language is making the cut. The problem is Go as a runtime has certain assumptions about the environments in which it runs. You know, embedded Linux Go is pretty great. But we're talking about systems even smaller that require substantial reliability.
Starting point is 00:24:29 It's your braking system. It's the airbag system. It's the system that controls the thermal rods in your nuclear power plants. These are mission-critical applications where there are many microcontrollers in use. And no one ever got fired for using C for an embedded system. But why aren't we using C for all our mission-critical web systems? Well,
Starting point is 00:24:52 we know why, because it's very, very hard to use C in a safe way. So all the cool kids, they're not just trying to be cool and new. They're saying, hey, maybe we could use a language that prevents us from doing things that are very bad ideas. You know, that's what Rust does. Yeah. But Rust puts all of the onus on the programmer. It's like the opposite of Ruby, right? Where Ruby says, we will forgive you your small errors and try to do the best we can to interpret your meaning. Right. Rust just says
Starting point is 00:25:28 no. Failure. And tries to give you some meaningful error messages if it can, but if you don't know what any of it means, then that's not helpful. You know, Go also will not compile. It's still got a certain rigor of requiring
Starting point is 00:25:44 like Fumpt. You know, Go Fumpt says, here's how Go code should be formatted. You know, and for the rebel hippie programmer, they're like, whoa, man, you know, like, don't quash my creativity. You know, for the corporate coder, you're like, what idiot wrote this code? It was you, sir. It was you, sir. No way it was me. Git blame. Oh, well, sir. No way it was me. Git blame.
Starting point is 00:26:05 Ah, well, somebody obviously modified the Git logs. Somebody rewrote the history. It could never have been me. So there's something to be said for a certain amount of discipline. Discipline leads to freedom. If you're disciplined about going to the gym, then you'll have the freedom to maybe eat some pizza because you've already worked out. In five years, I think Go will be much bigger than it is.
Starting point is 00:26:32 I think all of these organizations will realize they need to do edge computing, not just cloud computing. TinyGo will have completely conquered the world of the ultra-small. I like to think that is what's going to happen. That's what happens if we all work together to make it happen. An alternate history would be that something else fills the needs that TinyGo is filling. Is there other projects? Is there competition? I like to think of it as more cooperative.
Starting point is 00:27:04 Sure. I mean, it's competition only in the sense of like you can only eat at one restaurant tonight. Right. So is it the competition between the Szechuan place and the Thai place? Only in the sense that you're going to eat at one tonight and another tomorrow night.
Starting point is 00:27:20 In the micro sense, but you can like both places. Big picture. You can like both restaurants. Big picture, you can like both restaurants. And also, I mean, every programming language exists because it does something well. I really dislike when people are talking badly about some other programming language without having really used it. Because every single language does something well. That's what it was created for.
Starting point is 00:27:45 Now, you maybe are using it for the wrong thing or the thing that it does well is not something you care about doing. You know, I'll give you a great example. This language called Fortran. A very ancient language. Never heard of it. Used for mathematics. Still being used by NASA in order to figure out
Starting point is 00:28:03 the orbits of things in outer space. Fortran. If you want to work at NASA, you should learn Fortran. What does Fortran do well? Fortran does mathematics. It stands for Formula Translator. And it's probably the, besides COBOL, it's one of the oldest languages still being used actively today. Because it does this thing really, really well of mathematical calculations.
Starting point is 00:28:26 So it's worth learning Fortran if you really, really care about mathematical accuracy and being able to do substantial amount of processing quickly, you know, because doing these, you know, orbital plan calculations is quite difficult. So every language does something really well. That's why it was created. But everybody wants to use their preferred language for everything. True. That's hard to do.
Starting point is 00:29:00 So I think that there are other languages that are approaching the space of the extremely small. Yeah. You know, again, Rust. There's interesting things happening with Elixir. You know, people running Beam on microcontrollers. You know, that to me is extremely interesting. You know, C++ is not your father's C++ now. It has absorbed a lot of interesting syntax from dynamic languages,
Starting point is 00:29:29 like the auto keyword, you know, and defer things that are very, very interesting in dynamic languages being applied to static languages. Yeah. So, I mean, I think there's a lot of action, you know, happening in the small space. But, and a lot of us are running on top of LLVM. So when we run into a problem, like most programmers,
Starting point is 00:29:52 we assume it's our code and then only gradually come to the sinking realization that it's in the thing we're using and we have to either figure out how to fix that or provide a coherent bug report so that the maintainers can do so. Well, I've had the magnificently wonderful experience over the last months of running into a problem, figuring that perhaps it's LLVM, going to the LLVM mailing list and discovering that a week ago, somebody on the Rust Embedded team reported this. Or a week ago, someone on the Zig team reported this other thing.
Starting point is 00:30:29 Or in their case, going and finding that a week ago, our team reported it. So it's a really great collaborative effort. I mean, I consider open source the shared infrastructure of the 21st century, the roads and bridges of how we all perform our necessary daily functions of life and commerce. And so we're just trying to do our part within that. You know, there doesn't have to be a single winner. No. Right. In fact, we lose by that kind of monoculture because we, you know, any given technology platform or group needs a foil to bounce off of. If nothing else, healthy competition is a kind of sportspersonship.
Starting point is 00:31:13 It means we operate from a place of respect, and when the match is over, we celebrate the fact that we were able to compete together, and then we go on. But open source is nothing like that at all. There is no winner and loser. the fact that we were able to compete together and then we go on. Right. Right? But open source is nothing like that at all. There is no winner and loser. You know, it's more like a... I like to call our hack sessions that we have at GopherCon and other places jam sessions.
Starting point is 00:31:36 Because it's like a musical jam session. There's no winner. Right. There's no loser. You don't even have to participate. You could just show up and go wow this is really cool look what they're doing or you can jam as well
Starting point is 00:31:49 you win just by participating I think it was Albert King the late great blues guitarist said there's only three reasons to play music have fun make some money or learn something
Starting point is 00:32:03 so if you're playing music for some other reason, you should stop. If you're trying to impress somebody or gunslinging, look good, make them feel bad, you should just stop and go home because that's not a good reason to do it. So I try to take that same sensibility and apply it to the things we're doing in open source. And so the winners are all of us if we collaborate and cooperate. The losers are all of us if we don't invite people. I mean, I'll go back to the musical thing.
Starting point is 00:32:34 There have been plenty of cases where a person is sort of shyly standing on the side of a musical jam session that I've been at. And they don't they're not participating but they're there and there's like a glint in their eye that they really want to so if you do it well you pull them up to a mic and then this person who doesn't look anything out of the ordinary opens their mouth and your jaw drops to the ground because this voice comes out and you're like,
Starting point is 00:33:05 wow, thank you for getting past whatever it was and singing for us because I'm just in awe at how great this is. And, you know, I think this is a great lesson for inclusion in tech. There's people with a great voice who are just like, they're not going to sing unless you almost make them sing right so if it's sort of intimidating they're definitely not gonna they're gonna like stand on the side and like well this person's come to three jam sessions and never sung or play guitar i wonder why let's see what we can get them you know many cases they've got incredible hidden talents that if we could just allow them to flourish by giving them an opportunity, and it doesn't have to be forever, it's just one song. Then someone else steps up.
Starting point is 00:33:51 You know, that's about sharing the space. So I try to apply these same principles because, you know, we think tech is about utility. It's not. Tech is about aesthetics. If tech was about utility, we'd all use one programming language. It's about aesthetics. If tech was about utility, we'd all use one programming language. It's about aesthetics. Like, I prefer fuchsia and you prefer green. Why?
Starting point is 00:34:11 No actual reason. We don't have free will, my friend the neuroscientist says. What do you mean? We only think we have free will. Here, this is my same friend who said I needed sleep when I didn't need sleep. He's like, okay, let me prove to you, you actually need sleep. So I know better than to mess with this scientist. Okay, so he proved it to you.
Starting point is 00:34:32 We don't have free will. All right, all right. Go ahead, blow my mind. So basically, by doing functional MRI, this is probably something for your brain show, right? So by doing functional MRI and some experiments with choosing options and button pushing, they were able to determine that the choice of pushing the button occurred before the cognitive part of the brain responsible for the decision making, that it was just a little tiny bit afterwards. So the current best interpretation is we make a
Starting point is 00:35:02 random choice and then we explain to ourselves we made a conscious choice in order to maintain a consistent view of reality. But in fact, we have no free will. It's all completely random. Not to, you know, ruin your belief in self-determination. We better ruin things, Ron. But so it's about aesthetics. And that's what technology is about.
Starting point is 00:35:27 Fashion. It's about fads as much as it is about utility. But it's still about utility. Like, you're still going to need a pocket to put your cell phone in. Right? So if you're making pants without pockets, you know, you're not doing a favor to cell phone users, right?
Starting point is 00:35:43 You're making a purely aesthetic choice with no utility that's the difference between art and design art is just to get an evoke an emotional response and design is about doing something functional right like a glass hammer is beautiful to look at but it's totally useless if you want to do some framing you know of wood knocking down nails. Right. So. I'd probably suck at that job. We think we're purely utility based, but we're not. So, you know, Go is aesthetically pleasing to many people.
Starting point is 00:36:25 So if we can bring Go, you know, again, to like a good politician, bring it back around to my message. If we can bring Go to the smallest of platforms, then we are helping satisfy people's aesthetic desire to use Go and at the same time fulfilling the utility that they need to actually perform an important function that, generally speaking, is not taken very seriously by, like, oh, it's just the sensors, you know, it'll be fine. It's like, yeah, those are the sensors that say, you know, turn off the heat because, you know, the people are about to be cooked or, you know, turn off the elevator because it appears
Starting point is 00:36:54 that the automatic braking system of the elevator is not functional. It might plummet and, you know, hurt people. Right. That's a scary story right there too. Just to change the world, nothing important. That's why we started with toys. Chris Dixon, the investor, he said something like, any sufficiently advanced technology starts out in the form of a toy. I'm paraphrasing a little bit.
Starting point is 00:37:18 So we started with time to go with a toy. People said it was a toy language, so I said I'll build a toy with it just because I have a great sense of irony. Like, oh yeah, it's just a toy. I'll just build a toy. Nothing to see here. Anyone who's ever saw the old 80s or 90s movie Small Soldiers. We're talking Tina, child's play. Like, oh yeah, it's just a toy. Nothing to be afraid of. Just a toy. Friendly toys. This episode is brought to you by roll bar, move fast and fix things,
Starting point is 00:37:58 resolve errors and minutes and deploy with confidence. Head to rollbar.com slash change log, request a demo, get started today. It's loved by developers, trusted by enterprises, and most of all, we use it here at Changelog. Move fast and fix things with Rollbar. Once again, rollbar.com slash changelog.
Starting point is 00:38:28 A toy and a playground. So you have play.tinygo.org. Is tinygo.org the one-stop shop to get involved? Yes. We have a documentation website that's pretty good. There's been some great in-depth pages and also articles written especially by IK who as I mentioned IK Van Lattem is the IK VL on Twitter and GitHub and all that he's really the original project founder even though it's more than him it's all of us now but without IK that none of this could exist so
Starting point is 00:39:00 I really I always have to thank IK because yeah made my dream come true. I wanted to do this for years. And for me, this is truly a labor of love. But it also has tremendous value because this is something that needs to be done. If it didn't really need to exist, I'd probably be working on something else because, I mean, it's fun, but unless it's also important, then it's a hobby. Whereas this is a full-time thing. Let's play that game then. If you couldn't do what you're doing now, what would you do? If for some reason you had to stop doing this mission, what would be another alternative mission that's just, that would be exciting,
Starting point is 00:39:35 like the runner-up, let's say? Well, I think embedded systems and Go is the most exciting thing happening right now. But there's a lot of other exciting things happening in the world. Biotechnology, especially in genomics, is really interesting to me. What do you know about that? I think there's a huge opportunity for bioinformatics. Bioinformatics and cloud computing hasn't really, it's not a problem that's been solved at all.
Starting point is 00:39:59 Material science, I think, is incredibly interesting. Things like shape memory alloys, which are plastic. They're polymers that have the property which is opposite of normal metals. It's like normal metals, when you heat them, they expand, and when you cool them, they contract. So SMAs have the opposite. When you heat them, they expand, and when you cool them, they expand and when, sorry, when you heat them, they contract. And when you cool them, they expand. So they are very, very strong and could be used for kind of artificial muscles. You know, new kinds of solar cells, other kinds of conductive materials,
Starting point is 00:40:37 flexible electronics. That's the kind of stuff I'd like to be working on if I wasn't doing what I'm doing now. Where are you going with this? Where are you going with this? Reel it in. That's cool stuff. The future is already here. Oh, boy.
Starting point is 00:40:47 Right? It's just like William Gibson said, it's just not equally distributed. What about genome sequencing and stuff like that, like programming our cells and CRISPR and that kind of stuff? What are your thoughts? That's really in the bioinformatics and genomics. I think it's very exciting. What are the thoughts? That's really in the bioinformatics and genomics. I think it's very exciting.
Starting point is 00:41:07 What are the ethical boundaries there? Well, I think that ethics in technology is an under-touched subject. My oldest son is a student at the University of Portsmouth in the United Kingdom studying computer science. And last year when he finished his A-levels, which are the English equivalent of the last year of high school, they had to take a class in ethics and computer science. And it was all the IEEE ethics content. And I was really excited that this was part of their required curriculum. He, on the other hand, was sort of like, why do we have to study this?
Starting point is 00:41:46 I'm like, aha, son, you have just opened Pandora's box. Allow me to explain. Sit down, young man. Allow me to explain the need for ethics in technology. So I think there's a lot of biohacking going on right now that is completely unregulated. It's been going on for years. Describe biohacking. Describe biohacking. Describe biohacking.
Starting point is 00:42:06 So biohacking is when you decide to do some genetic engineering on your own using equipment you bought yourself through eBay or the internets. So in 2009, there was a really amazing conference that took place in Canada called Future Ruby. Future Ruby was was a really amazing conference that took place in Canada called Future Ruby. Future Ruby was really a seminal conference. One of the speakers was the team of Nitobe, the creators of PhoneGap, that ended up selling their company to Adobe. There was a lot of really amazing people at this conference.
Starting point is 00:42:40 I was there with my brother Damon flying Ruby Howard blimps. And one of the talks was a professor from MIT who gave a workshop the day before on biohacking. So what everybody did was they grew phosphorescent algae in a Petri dish. So this is 2009. And he's talking about how you can buy a genome sequencer for, at the time, I think it was about $5,000 US on eBay. And needless to say, it has not gotten more expensive or harder to get this kind of equipment. So I think that it's one of the big differences. What was the name of the guy who created the first internet virus? His dad worked for the NSA.
Starting point is 00:43:27 I don't know. Me either. It's not Mitnick. Anyway, it was the first internet worm. So it was not created maliciously. It was created originally because he wanted to map all the IP addresses within this space. And he wrote this code that would automatically download itself onto any computer
Starting point is 00:43:48 and then do the same thing. Made an error in the code, which caused it to escape the subnet, and it took down the entire internet at the time. Got in a bit of trouble, and if it hadn't been for Dad's NSA connections, we'd probably still be in an undisclosed location. Actually, back in those days, they still hired teenagers who were hackers to work for them as security people. Yeah. Not like now.
Starting point is 00:44:11 But take that idea, but apply it to biohacking. Well-meaning person doesn't think they're doing anything bad in a basement, not fully understanding the implications of their work and making an error. No bad intentions. I'm ignoring the bad intentions people just because I think that it's very hard to do anything that works at all in this space yet. So the odds of you making a mistake and having something happen are much greater than bad people doing awful things.
Starting point is 00:44:46 But that's also a possibility. But if all we do is restrict it completely, like, you know, no man's land, you can't go there, then it's going to be done elsewhere. It's the same as saying you can't do computing on the Internet because you might transfer an intranet virus right right so one extreme means we remain in ignorance and then it's like the demon haunted world of carl sagan we don't understand what's going on and it's affecting us the other is every human for themselves with no control and no care over the implications, which I think has been a very common attitude in tech, which is poorly interpreting Grace Hopper's ask forgiveness, not permission. So first of all, many people don't know that Admiral Grace Hopper said that, the attribution.
Starting point is 00:45:38 But also they don't realize what she was talking about, which was she was a military officer in a large organization. And if you've ever worked at a company or an organization that operates at that kind of global scale, it's very, very hard to get permission to do anything because, you know, you need to go up three or four levels in the hierarchy above your boss to get permission, especially if there's no cost to the organization and substantial benefit. So ask forgiveness, not permission meant do the right thing within the organization, whether or not they know it.
Starting point is 00:46:11 That way you can help the people that you work for, not move the extrinsic cost to the public domain so that we can profit. That is not the same thing at all. No, that's true. So I don't want to pick on any particular company, but I think we could rattle off a list of companies whose primary business model is to take public goods and to turn them into private profits. And, you know, to me, that's sort of antithetical to this whole idea of, you know, what is technology for? Well, it's to improve human well-being. There is no other reason.
Starting point is 00:46:48 Right. You know, have fun, make some money, or learn something. And it keeps going back to that. So to wrap it around then, where are the TinyGo jam sessions? Is it the Slack community, like if you wanted to jam with you guys? Or just be a wallflower and maybe get talked into coming and singing? Is it on GitHub? Is it in your Slack? Where does the actual community hang out?
Starting point is 00:47:11 A lot of us are on Slack. Total disclosure, I would have preferred IRQ because I like open source. It's really hard to use IRC and IRQ. Free node is great, but it requires too much knowledge. That's right. And so I kind of gave up that fight. I can't fight everything all at once. I was the one saying we should be using Git
Starting point is 00:47:35 as a distributed version system and not as a hub and spoke system, but that didn't go anywhere either. Not because of pointing fingers and saying you're bad, but more, can we have other possible options? So anyway, we're all on Slack. There's a lot of people joining. You know, Slack is certainly a good platform for this because you're relatively easy.
Starting point is 00:47:55 We have a really active community. There's a bunch of us in Europe. There's a bunch of people in Asia. There's a bunch of U.S. people. So pretty much 24 hours a day, there's somebody around to help. We're really active on our GitHub repositories. This is why we have a few members of the organization, so that we can respond quickly to people's requests for assistance.
Starting point is 00:48:19 Sometimes GitHub issues are support requests and not issues. But we're there to help. I mean, we're trying to, you know, get this technology out there and make it easier for people to use. So, you know, part of our responsibility as maintainers is to do that. You know, we've had a few people come into our Slack and say, why don't you use language X, not X, another language that has a single letter. And we were like, oh, that's a totally cool language,
Starting point is 00:48:45 but we're not really thinking of moving to that, no. We're doing TinyGo. Cool language too, though. Nothing wrong with it, and it should be done. We're not telling people rewrite in TinyGo either. We're saying, check out TinyGo, it's cool, and maybe it will help you. If you like Go, you'll like this. But we're not saying, you need to do this because we're so much better.
Starting point is 00:49:07 I mean, we think it's better or we wouldn't be doing it, but we don't expect it to be better for everyone all the time. But yeah, Slack is great. Twitter, we're tinygolang on Twitter because there already was a tinygo. On GitHub, it's tinygo-org, and that's where we have all our repositories. We have the main tinygo repo with the compiler. We have a drivers repository that's got hardware drivers for a bunch of sensors and displays. We've got the tinygo playground code, which I think needs an update since we moved to the serverless processing of the compilation jobs.
Starting point is 00:49:45 Yeah, we're doing WebAssembly, RISC-V, and serverless all in one app. It's definitely buzzword compliant. Yeah, that's a bingo right there. If you don't find us because we hit all three of those, it's because you're just not buzzword compliant investors.
Starting point is 00:50:02 Cool, Ron. Well, thanks so much for talking to us today, man. Hey, thank you so much for talking to us today, man. Hey, thank you so much for having me. I really appreciate what you guys do. It's a great podcast. You have lots of really interesting, wonderful people, and me, occasionally. So thanks a lot, and check it out, tinygo.org.
Starting point is 00:50:18 Yes. Thanks, Ron. All right. Thank you for tuning in to this episode of The Change Log. Hey, guess what? We have discussions on every single episode now. So head to changelog.com and discuss this episode. And if you want to help us grow this show, reach more listeners and influence more developers, do us a favor and give us a rating or review in iTunes or Apple podcasts. If you use Overcast, give us a star. If you tweet, tweet a link. If you make lists of your favorite podcasts, include us in it. Also, thanks to Fastly, our bandwidth partner,
Starting point is 00:50:52 Rollbar, our monitoring service, and Linode, our cloud server of choice. This episode is hosted by myself, Adam Stachowiak, and Jared Santo, and our music is done by Breakmaster Cylinder. If you want to hear more episodes like this, subscribe to our master feed at changelog.com slash master, or go into your podcast app and search for changelog master. You'll find it. Thank you for tuning in this week.
Starting point is 00:51:17 We'll see you again soon. Well, hello there, listeners. How are you? This is Adam Stachowiak. If you haven't heard yet, we're launching a new show called Brain Science. It's a podcast for the curious. Are you curious? Because if so, we're exploring the inner workings of the human brain
Starting point is 00:51:52 to understand things like behavior change, habit formation, mental health, and what it means to be human. It's brain science applied, not just how does the brain work, but how do we apply what we know about the brain that can transform our lives? Learn more about the show and subscribe at changelog.com slash brain science. Until then, here's a preview of episode one, where we talk about
Starting point is 00:52:16 the fundamentals of being human. We're also all designed to be in relationship. We are fundamentally hardwired to have social groups and this sense of attachment. And because I'm sort of a geek when it comes to research, what researchers have found is that attachment, which that's what we label how we relate and connect with others, attachment is 100% learned, which means our genetics don't actually contribute to how we learn to stay in proximity with other people. And with that, that we all develop ways to manage the threat of the loss of a relationship. But nobody gets to opt out of going, I need to be in relationship with others. I mean, think about it within the context of the
Starting point is 00:53:06 prison system. Like, why is it that the punishment for prisoners when they don't fall in line is isolation? Yeah, that's true. Right? That wouldn't be significant if in some way that doesn't actually harm our brain. It's almost like we need to have that echo from another human being to let us know that we were there or we're alive or just some sort of feedback loop. I'm not really sure how to describe that. Well, it really is this sense of being with, right? Like I can't fight battles on my friend's behalf or on my kid's behalf, right? But the simple fact that I know of what's going on makes the difference because I would contend it sort of like I help them hold that weight emotionally.
Starting point is 00:53:50 And so that actually leads me into the third thing. And the third thing that I would say in regards to the fundamentals of being human is that we all struggle. Oh, yes. Right? Big time. And that, you know, we don't always get to pick the way in which we struggle, but we all struggle. Well, if you like what you hear, you should go to changelog.com slash brain science. The show is not out yet, so don't get too excited.
Starting point is 00:54:17 But you can subscribe and be notified as soon as the show launches. Once again, changelog.com slash brain science.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.