<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[musings about software]]></title><description><![CDATA[An engineer changing the world one-line-of-code at a time...]]></description><link>https://andrealmar.com</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 02:08:48 GMT</lastBuildDate><atom:link href="https://andrealmar.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[WebAssembly, Serverless, Cloud Native and the future]]></title><description><![CDATA[You may have heard about WebAssembly out there, right? Not? No problem ... my role here in this blog post is to explain a little about WebAssembly, what it has to do with Serverless and Cloud Native and do a futurology exercise to show you what (in m...]]></description><link>https://andrealmar.com/webassembly-serverless-cloud-native-and-the-future</link><guid isPermaLink="true">https://andrealmar.com/webassembly-serverless-cloud-native-and-the-future</guid><category><![CDATA[WebAssembly]]></category><category><![CDATA[serverless]]></category><dc:creator><![CDATA[Andre Almar]]></dc:creator><pubDate>Mon, 02 Nov 2020 22:38:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1604963047630/Sf7rLA0fL.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You may have heard about WebAssembly out there, right? Not? No problem ... my role here in this blog post is to explain a little about WebAssembly, what it has to do with Serverless and Cloud Native and do a futurology exercise to show you what (in my opinion) will happen (in real, it's already happening) going forward. A lot of things? Well ... first things first ... what the hell is WebAssembly? It feels like there is history .... because this post is long!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604961664224/gIc5u507s.png" alt="image.png" /></p>
<p><strong>The evolution of the web</strong></p>
<p>The <em> web </em> has evolved very fast. For you noble readers to have an idea of ​​how new the <em> web </em> as we know it today, I list below some of the main milestones and their respective dates:</p>
<ul>
<li>URL (December - 1994) - https://tools.ietf.org/html/rfc1738/201</li>
<li>HTML (June - 1993) - https://www.w3.org/MarkUp/draft-ietf-iiir-html-01.txt</li>
<li>HTTP Protocol (May - 1996) - https://tools.ietf.org/html/rfc1945/201</li>
</ul>
<p>We are talking about things that are common to us today like <em> URL, HTTP, HTML </em> and other jargon that is in the "people's mouth" having their specifications being made in the early 90's.</p>
<p>Over time, the use of <em> web </em> applications has become increasingly common. At the beginning we had applications running on a <em> browser </em> and after a few years on our <em> smartphones </em>. Nowadays a very widespread concept is the <em> mobile first </em> which says that the initial focus of the architecture and development of an application should be directed primarily to mobile devices.</p>
<p><strong>Javascript</strong></p>
<p>When we hear about <em> Javascript </em> this programming language almost automatically becomes synonymous with <em> web </em>. I say this because it was created by <em> Brendan Eich </em> (today <em> Co-Founder </em> and CEO of <em> Brave </em>) who was hired by <em> Netscape </em> at the time to develop a <em> script </em> language for your browser <em> Netscape Navigator </em> . <em> Brendan </em> at first thought of embedding the language <em> Scheme </em> (a LISP dialect) in the browser but soon Netscape's <em> management </em> opted to create a new language with a syntax "similar" to Java (which was very successful at the time) . They needed a prototype of the new language, which <em> Brendan </em> developed in just 10 days. Thus was born <em> Javascript </em> a language loved by some hated by others but with undeniable importance and protagonism in the scenario of <em> web </em> applications until today: About <strong> 96.8% </strong> of <em>websites</em> uses <em>Javascript</em> https://w3techs.com/technologies/details/cp-javascript/</p>
<p><strong> Curiosity: </strong> Did you know that the <strong> brand </strong> "Javascript" belongs to Oracle? (https://tsdr.uspto.gov/#caseNumber=75026640&amp;caseType=SERIAL_NO&amp;searchType=statusSearch)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604961947892/4IhgI5vYq.png" alt="image.png" /></p>
<p>In November 1996, <em> Netscape </em> submitted <em> Javascript </em> to <em> ECMA </em> <em> International </em> (<em> European Computer Manufacturers Association </em>) as a first starting point towards its standardization. The first language specification in June 1997 was released as ECMAScript. All companies that provide a <em> web </em> browser (<em> Apple, Google, Mozilla, Microsoft, Brave, Opera, etc. </em>) can follow this same specification and thus have their browsers compliant with the <em> Javascript </em> language. This standardization of ECMA is very important because it ends with that story of each <em> vendor </em> (supplier) inventing to have his "own version of <em> Javascript </em>" <em>. </em> The same code <em> Javascript </em> that I write will execute in Safari, on Chrome, Firefox, Edge, and so on. Imagine having to write a different <em> Javascript </em> code for each type of <em> browser </em>? It wouldn't be pleasant ...</p>
<p>The <em> web </em> has evolved so much that today it is possible to run Unreal Engine 4 in the <em> browser </em>. See the video below for an example of this happening:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=lDkjb4X6IUA&amp;feature=emb_title">https://www.youtube.com/watch?v=lDkjb4X6IUA&amp;feature=emb_title</a></div>
<p>You may be asking yourself: How is this possible?</p>
<p><strong>asm.js</strong></p>
<p>There is a <em>subset</em> (smaller set) of Javascript called <em>asm.js</em> created in 2013. The idea is to allow <em> software </em> written in languages ​​like C for example, to run as web applications while maintaining some features like performance , better than the standard Javascript. All this "magic" is achieved thanks to <em>Emscripten</em> which is a <em>source-to-source</em> compiler that runs as the LLVM's backend and produces this subset from Javascript known as <em>asm.js</em>.</p>
<p>In short: If your <em> software </em> was originally designed and written to run as an executable, with <em> asm.js </em> you can integrate it with your <em> web </em> <em> client-side </em> application.</p>
<p>But is it too slow? Not because <em>asm.js</em> can be compiled by browsers in a process called <em>ahead-of-time optimization</em> which allows more speed and performance. Not to mention that <em>asm.js</em> was supported by many browsers which made it an interesting alternative to <em>Google NaCi</em> (<em>Native Client</em>) that until then only ran on Chrome.</p>
<p><strong>Google NaCi (Native Client)</strong></p>
<p>Google NaCi (Native Client) is a <em>sandbox</em> technology that allows you to run native code securely from within a web browser regardless of the client's operating system. This allows web applications running in this context to perform almost natively. This technology was also used in Chrome OS.</p>
<p>An interesting use of <em>Google NaCi </em> (https://developer.chrome.com/native-client) can be seen in the <em>Go Playground</em> (https://play.golang.org) where you can execute Go code directly from your browser. User code execution is done safely and isolated from Google’s infrastructure. <em>Google NaCi</em> limits the amount of CPU and RAM a program can consume and prevents them from accessing the network or file system of the infrastructure that is running them.</p>
<p>However, as everything in our area changes or evolves very quickly, in May 2018 Google introduced <em>gVisor</em>, a second generation of <em>sandbox technology.</em></p>
<p><strong>gVisor</strong></p>
<p><em>GVisor</em> is a sandbox technology developed by Google that focuses on security, efficiency and ease of use. Implements around 200 <em>syscall </em> of Linux in userspace as opposed to Docker which runs directly on the Linux kernel and is isolated via namespaces. <em>GVisor</em> is written in Go which prevents common pitfalls that often occur with software written in C, for example. It is widely used in production at Google on products like AppEngine, Cloud Functions, Cloud Run and GKE (Google Kubernetes Engine).</p>
<p>Although containers have revolutionised the way we develop, package and deploy our applications, there is a great concern with security when we talk about this type of environment. Many people think that Docker brings the necessary security by default and run software on this platform without worry. However, we know that if you download images Docker without knowing the source, running applications as <em>root</em> in Docker, among others, is the gateway to a series of security problems in your environment.</p>
<p>As they once said:</p>
<blockquote>
<p>"Docker is about running random code downloaded from the Internet and running it as root."</p>
</blockquote>
<p>Do you want something more dangerous than that? So we must assume that the <em>Docker</em> and * Linux kernel will NOT protect us from malware or attacks.</p>
<p>Below I leave an excerpt from the article <em>Are Docker containers really secure?</em> written by <em>Daniel J Walsh</em>:</p>
<blockquote>
<p>So what is the problem? Why don't containers contain?</p>
<p>The biggest problem is everything in Linux is not namespaced. Currently, Docker uses five namespaces to alter processes view of the system: Process, Network, Mount, Hostname, Shared Memory.</p>
<p>While these give the user some level of security it is by no means comprehensive, like KVM. In a KVM environment processes in a virtual machine do not talk to the host kernel directly. They do not have any access to kernel file systems like /sys and /sys/fs, /proc/.</p>
<p>Device nodes are used to talk to the VMs Kernel not the hosts. Therefore in order to have a privilege escalation out of a VM, the process has to subvirt the VM's kernel, find a vulnerability in the HyperVisor, break through SELinux Controls (sVirt), which are very tight on a VM, and finally attack the hosts kernel.</p>
<p>When you run in a container you have already gotten to the point where you are talking to the host kernel.</p>
<p>Major kernel subsystems are not namespaced like:</p>
<p>SELinux, Cgroups,  file systems under /sys /proc/sys, /proc/sysrq-trigger, /proc/irq, /proc/bus</p>
<p>Devices are not namespaced: /dev/mem, /dev/sd file system devices, Kernel Modules</p>
<p>If you can communicate or attack one of these as a privileged process, you can own the system.</p>
</blockquote>
<p>Applications that run on traditional Linux containers are not sandboxes as they make <em>system calls</em> directly to the host kernel where they are running:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962306184/xqFA_Fbur.png" alt="image.png" /> 
Source: https://cloud.google.com/blog/products/gcp/open-sourcing-gvisor-a-sandboxed-container-runtime</p>
<p>The kernel imposes some limits on the resources that the application can access and these limits are implemented through <em>cgroups</em> and <em>namespaces</em> but not all resources can be controlled via these mechanisms. You can use a <em>seccomp</em> filter but then you have to create a pre-defined list of <em>system calls</em>. In practice you will have to know which <em>system calls</em> your application will call.</p>
<p>One way to increase the isolation of the <em> containers </em> is to run each <em> container </em> in its own virtual machine. In this case, the running <em> container </em> will have its own <em> kernel </em>, its own virtualized <em> devices </em>, among other things, completely separate from the <em> host </em> running it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962393805/UwCV3tp-K.png" alt="image.png" />
Source: https://cloud.google.com/blog/products/gcp/open-sourcing-gvisor-a-sandboxed-container-runtime</p>
<p>It is a valid approach but with a high footprint. Initiatives like <em>Kata containers</em> follow this same approach but keep the VM (Virtual Machine) simplified to obtain a minimum footprint and maximize the performance of container isolation.</p>
<p><em>GVisor</em> is lighter than a VM (Virtual Machine) and maintains a similar level of isolation. For that, <em>gVisor</em> has a <em>kernel</em> written in Go that can make calls to most <em>system calls</em> of Linux.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962431889/8dix6p_9E.png" alt="image.png" />
Source: https://cloud.google.com/blog/products/gcp/open-sourcing-gvisor-a-sandboxed-container-runtime</p>
<p>We can then infer that gVisor runs <em> containers </em> with an extra layer of insulation. With the use of <em> gVisor </em> we decrease the direct interaction between the <em> container </em> and the <em> host </em> and consequently we decrease the attack surface.</p>
<p><strong>Sandbox</strong></p>
<p>Have we seen technologies like <em> gVisor </em>, <em> Google NaCi </em>, <em> seccomp, Docker </em>, <em> cgroups </em> and <em> namespaces </em>, <em> Virtual Machines </em>, <em> Kata Containers </em>, etc? All cited so far deal in one way or another with something in common: <strong> isolation </strong>. Add to this list also <em> SELinux </em>, <em> AppArmor </em>, <em> Nabla Containers </em>, among others. Who remembers Microsoft's Silverlight there? It was a micro version of the .NET Framework that allowed applications to run in a <em> sandbox </em> within the <em> browser </em>.</p>
<p>We can see the <em> sandbox </em> as a special layer of protection. With the use of a <em> sandbox </em>, we concentrate the operations performed inside it in a restricted area, where any unreliable code can execute completely isolated from the operating system.</p>
<p>When executing a <em> workload </em> <em> serverless </em> for example, it will inevitably run a <em> sandbox </em>, isolated from the <em> host </em> of the server that runs it.</p>
<p><strong>Serverless</strong></p>
<p>With the advent of <em> serverless </em> computing, <em> cloud </em> service providers (Google, AWS, Microsoft, etc.) <em> deploy </em> your application code and manage the allocation of resources needed to run your software in a way dynamics. This prevents the developer from worrying about infrastructure management.</p>
<p>To achieve this goal described above, among other things, <em> cloud </em> providers use a variety of virtualization platforms such as the aforementioned <em> Google gVisor </em> and <em> AWS Firecracker </em>, a Micro-VM that is one of the secrets behind of the speed and performance of the famous <em> Lambda Functions </em>. All of these platforms, as previously mentioned, use an <strong> isolated </strong> environment to perform their computational <em> workloads </em>.</p>
<p>When we use some <em>Serverless</em> offer that exists on the market today, one thing we have to deal with is the <em> cold-starts </em>. I will not explain in detail what it is about, but in summary: it is the time it takes to initialize the process that executes your code.</p>
<p>Is there any way to escape from <em> cold-start </em>? Let's see ...</p>
<p><strong>Edge Computing</strong></p>
<p>Another term that is quite fashionable. In a simplified way, we can say that <em>Edge Computing</em>  is a network of micro datacenters to process data locally, that is, at the edge of the network, instead of sending it to the cloud . In this way, only the most relevant data goes through the network so to speak. This makes it easier for users to access your files, for example, and latency decreases because the content is stored closer to the source.</p>
<p>CDN companies like <em> Cloudflare </em> and <em> Fastly </em> started to think: What if we let people run code on our servers instead of just <em> caching </em> assets <em> (images and etc.)? Fastly Terrarium and Cloudflare Workers allow you to run your code (in WebAssembly format) on </em> edge *, on a server somewhere in the world.</p>
<p>There is a <em> Cloudflare </em> platform called <em> Workers </em>. And unlike many existing <em> cloud </em> platforms, <em> Workers </em> does not use <em> containers </em> or <em> VMs </em> (<em> Virtual Machines </em>). How do they do this?</p>
<p>Well, there is a technology created by the <em> Google Chrome </em> team called <em> V8: Isolates </em>. These are small contexts that allow a single process to run thousands of "<em> Isolates </em>". This makes it possible to run "untrusted" code from different clients in a single process on the operating system. <em> Isolates </em> start very quickly and do not allow an <em> Isolate </em> to access the memory of another <em> Isolate </em>, for example.</p>
<p>One of the disadvantages of using <em> Isolates </em> is that you are unable to run any binary compiled on it unlike <em> Lambda </em>. You must write your code in <em> Javascript </em> or in a language that compiles for <em> WebAssembly </em> such as Rust, Go, C or C ++, .NET among others. There is a lot of work being done so that more and more languages ​​compile for <em> WebAssembly </em>. The full list you can see here (https://github.com/appcypher/awesome-wasm-langs)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962505686/WIxp5O98M.png" alt="image.png" />
Source: https://www.infoq.com/presentations/cloudflare-v8/</p>
<p>Below is a comparison of some available <em> Serverless </em> options:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962539343/qvdZkGxQd.png" alt="image.png" />
Source: https://blog.cloudflare.com/cloud-computing-without-containers/</p>
<p>The big advantage with using <em> Cloudflare Workers </em> is that they don't have to start a process like <em> Lambda </em> does. <em> Isolates </em> starts in 5 milliseconds, almost imperceptibly. We have isolation and scalability much faster than the <em> Serverless </em> offerings that the chart above compared.</p>
<p>Did you notice that we are talking again about <strong>isolation</strong>? Even because the name <em>V8: Isolates</em> doesn't let me lie. =)</p>
<p><em>Cloudflare Workers</em> was initially created to allow <em> deploy </em> Javascript code directly to <em>datacenters</em> (or PoPs - Points of Presences) around the world. And until 2018 you could only use <em> Javascript </em> as stated above. Using <em> WebAssembly </em> it is now allowed to run a range of languages ​​that compile for <em> WebAssembly. </em> Phew ... we finally arrived at the so-called <em> WebAssembly </em>.</p>
<p><strong>WebAssembly</strong></p>
<p>WebAssembly - usually abbreviated as "WASM" - is a technology that extends the web platform to support compiled languages ​​such as C, C ++, Rust, Go among others. These languages ​​can be compiled in a binary WASM format used in a <em> browser </em> for example.</p>
<p>The definition of the official WebAssembly website is:</p>
<blockquote>
<p>WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine.</p>
</blockquote>
<p>The main features of WebAssembly are:</p>
<ul>
<li>Binary format instruction</li>
<li>stack-based VM</li>
<li>Portability</li>
</ul>
<p>A stack-based virtual machine is an abstraction from a computer that emulates a real machine. Usually such a VM is built as an interpreter of some special type of <em> bytecode </em> that translates it into real time for execution on the CPU (JIT - Just In Time). Some examples of virtual machines based on <em>stack</em>: JVM (Java Virtual Machine) and the CLR (Common Language Runtime) of .NET.</p>
<p>With regard to portability, the main objective is that you write once and execute your code anywhere. Wait .... I've heard that in the past 🤔</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962593503/v3q0_rXeL.png" alt="image.png" />
Write Once, Run Anywhere</p>
<p>It doesn't matter which CPU, which operating system, which architecture you will run your code on because it is a standardised binary format and the host running it takes care of that.</p>
<p>So how is WebAssembly different from all of these <em>sandbox</em> technologies already presented? Some reasons below:</p>
<ul>
<li>W3C standard (not a proprietary technology that belongs to a single company)</li>
<li>Supports multiple languages ​​(Go, Rust, C, C ++, etc.)</li>
<li>Integration with Javascript</li>
<li>Efficient (because of the binary format it is very light)</li>
</ul>
<p>WebAssembly has become the fourth language to run natively in browsers after HTML, CSS and Javascript. All the most used <em> browsers </em> already support its use:</p>
<ul>
<li>Brave</li>
<li>Chrome</li>
<li>Edge</li>
<li>Firefox</li>
<li>Opera</li>
<li>Safari</li>
</ul>
<p>Now I'm going to use <em>WebAssembly</em> instead of <em>Javascript</em> for everything? Of course not ... after all <em>WebAssembly</em> is not a silver bullet. <em>WebAssembly</em> shines your eyes when we need to perform an operation that consumes a lot of resources such as resizing images, audio processing, etc. These applications require a lot of mathematical operations and careful memory management. While it is possible to perform these tasks in pure JavaScript - and mechanisms like V8 have made impressive efforts to optimize this code - in the end, nothing beats a language compiled with static types and explicit allocation.</p>
<p>The importance of <em>WebAssembly</em> is so great that the creator of <em>Docker</em> did the following <em>tweet</em>:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962632048/kGTCdVunF.png" alt="image.png" />
https://twitter.com/solomonstre/status/1111004913222324225?lang=en</p>
<p>Remember that we talked about the JVM (Java Virtual Machine) earlier? Look what Solomon Hykes creator of Docker wrote about:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962670460/GrXiC9XRn.png" alt="image.png" />
https://twitter.com/solomonstre/status/1111131559761833984</p>
<p>This makes it clear again that having an ubiquitous <em> runtime </em> is not a new desire. A long time ago we can see several initiatives to achieve this.</p>
<p>However, the use of WebAssembly is not limited to <em> browsers </em>. We have already managed to run <em> WebAssembly </em> on the server side. There are already a number of <em> runtimes </em> to run <em> WebAssembly </em> in this context:</p>
<ul>
<li>wasmtime</li>
<li>wasmer</li>
<li>lucet</li>
<li>wasm3</li>
<li>eos-vm</li>
<li>wasm-micro-runtime</li>
</ul>
<p>Each with its different areas of focus: some runtimes for <em> blockchain </em> applications, others targeting performance and so on.</p>
<p>And this is where it starts to get interesting ....</p>
<p><strong>WASI (WebAssembly Systems Interface)</strong></p>
<p>Developers started using <em> WebAssembly </em> in addition to <em> browser </em>, because it provides a fast, scalable and secure way to run the same code on any machine.</p>
<p>For this, the code needs to communicate with the operating system of the machine in question. And to carry out this communication, a system interface is required.</p>
<p>Remembering that <em>WebAssembly</em> is an assembly language for a CONCEPTUAL machine, not a real machine. Because of this, <em>WebAssembly</em> can run on different physical machine architectures.</p>
<p>And since <em>WebAssembly</em> is an <em>assembly</em> language for a conceptual machine, it also needs a system interface for a conceptual operating system, not just for a single operating system like only <em>Linux</em> or only <em>Windows</em>. That way <em>WebAssembly</em> can run on different operating systems.</p>
<p>That is why WASI (<em>WebAssembly Systems Interface</em>) was created - a system interface for the <em>WebAssembly</em> platform.</p>
<p>In summary, with WASI developers will not need to port (recompile) their code to each different platform out there.</p>
<p>With the introduction of this new abstraction layer, your code can be compiled for WebAssembly and run on any platform that supports the WASI standard. The real "write once (or compile once), run anywhere".</p>
<p><strong>Cloud Native</strong></p>
<p>The use of <em>WebAssembly</em> is so vast that it has reached the <em>Cloud Native</em> world. One of the pioneers to adopt the use of <em>WebAssembly</em> was the <em>Envoy</em> proxy.</p>
<p><em>Envoy</em> integrated a <em>WebAssembly Virtual Machine</em> in order to avoid having to recompile <em>Envoy</em>. You can link your <em>WebAssembly</em> module to <em>Envoy</em> without having to compile <em>Envoy</em> again. So you reach extensibility more easily.</p>
<p>Filters that can handle a request in <em>Envoy</em>. With <em>WebAssembly</em> you can build your own filters in <em>WebAssembly</em> without having to recompile <em>Envoy</em>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962738773/L7c-iCxBT.png" alt="image.png" /></p>
<p>It is very worthwhile to check out the work that the https://solo.io people are doing regarding the use of <em>WebAssembly</em> in <em>Envoy </em>. They created <em>WebAssembly Hub,</em> a place where people can post and share their own <em>wasm</em> extensions for <em>Envoy</em> with others.</p>
<p>Another very interesting project is the <em>Krustlet</em>. A virtual <em>kubelet</em> written in <em>Rust</em> made by the staff of <em>DEIS Labs</em> a division of Microsoft. The purpose of <em>Krustlet</em> is to make it easy to run <em>WebAssembly workloads</em> on <em>Kubernetes</em>. And they also wanted to show the community that they could write parts of Kubernetes (which is written in Go) in other languages ​​(like Rust).</p>
<p>It is important to remember that both <em> Krustlet </em> and WASI are projects in the experimental phase, but there is much promise in the combination of these two technologies. You give Kubernetes access to a second <em> sandbox </em> and gain an extra option to distribute your application that can now run outside the datacenter, in an <em> edge </em> environment.</p>
<p><strong>The future</strong></p>
<p><em>WebAssembly</em> is a very new technology. It reached the main browsers in 2017 (just under 3 years). The team working on it is very concerned about backward compatibility, which means that the WebAssembly you create TODAY will continue to work in <em>browsers</em> in the future.</p>
<p>The main idea is that you can run precompiled code written in any language on the <em>web</em> and any other platform.</p>
<p>With WASI a new way of writing applications opens - with any language, that runs anywhere (platform) and that speaks to each other fluently without any <em>wrapper</em> or <em>network calls</em>.</p>
<p><em>Will WASM replace Javascript?</em> </p>
<p>Not in the near future. It will co-exist. WASM cannot yet handle the DOM for example. No application is going to be rewritten in wasm for now. But in the future who knows, new applications will be written completely in WASM (using a language like Go, Rust, etc.).</p>
<p><em>Will WASM replace Docker?</em> </p>
<p>Then I let the creator of Docker answer that:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604962795209/LLPqyV2Yg.png" alt="image.png" /></p>
<p>I am not an expert in WebAssembly, but I am excited about the possibilities that this brings us to the future. I hope you are excited too!</p>
<p><strong>Bibliography:</strong></p>
<p>A Brief Story of Javascript - http://speakingjs.com/es5/ch04.html</p>
<p>Open-sourcing gVisor, a sandboxed container runtime - https://cloud.google.com/blog/products/gcp/open-sourcing-gvisor-a-sandboxed-container-runtime</p>
<p>asm.js - https://asmjs.org</p>
<p>gVisor - https://gvisor.dev</p>
<p>Are Docker containers really secure? - https://opensource.com/business/14/7/docker-security-selinux</p>
<p>Updates in container isolation - https://lwn.net/Articles/754433/</p>
<p>Container Isolation at Scale (Introducing gVisor) - https://www.youtube.com/watch?v=pWyJahTWa4I</p>
<p>Cloud Computing without Containers - https://blog.cloudflare.com/cloud-computing-without-containers</p>
<p>Fine-grained Sanboxing with V8 Isolates - https://www.infoq.com/presentations/cloudflare-v8</p>
<p>Redefining extensibility in proxies - introducing WebAssembly to Envoy and Istio - https://istio.io/latest/blog/2020/wasm-announce</p>
]]></content:encoded></item><item><title><![CDATA[DevOps Days Ghent (10 Years)]]></title><description><![CDATA[DevOps Days Ghent - Day 0
Dia extremamente intenso!! Muito cansado mas feliz =) 
Ter a oportunidade de estar reunido com 150 organizadores de #DevOpsDays de mais de 50 cidades ao redor do mundo é uma experiência incrível!! 
Tivemos MUITOS insights e ...]]></description><link>https://andrealmar.com/devops-days-ghent</link><guid isPermaLink="true">https://andrealmar.com/devops-days-ghent</guid><category><![CDATA[Devops]]></category><category><![CDATA[community]]></category><dc:creator><![CDATA[Andre Almar]]></dc:creator><pubDate>Sat, 02 Nov 2019 00:35:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055683166/kNTTvC-3I.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>DevOps Days Ghent - Day 0</strong></p>
<p>Dia extremamente intenso!! Muito cansado mas feliz =) </p>
<p>Ter a oportunidade de estar reunido com 150 organizadores de #DevOpsDays de mais de 50 cidades ao redor do mundo é uma experiência incrível!! </p>
<p>Tivemos MUITOS insights e aprendemos bastante sobre os problemas que os organizadores de #DevOpsDays enfrentam mundialmente! Existe solução para todos os problemas? Não...mas existem maneiras de contorná-los!! Notamos que muitos das dificuldades encontradas são as MESMAS em qualquer lugar do mundo. A troca de experiências nos Open Spaces foi outro ponto de destaque do evento. Ter um espaço para conversar com outros organizadores sobre experiências e a maneira de organizar um #DevOpsDays, ouvir sugestões e dicas, experiências de como solucionaram problemas ao redor do mundo é muito bom! </p>
<p>O Rafael Gomes fez uma palestra massa mostrando como cresceram os DevOps Days em território nacional (esse ano tivemos 15 eventos no Brasil) e ao fim em um gesto de grandeza chamou os organizadores dos DevOps Days do Brasil no palco para demonstrar a força da comunidade! </p>
<p>Para fechar este dia incrível, tivemos um jantar (VIP Dinner) aonde contamos com a presença do “Godfather” do #DevOps Patrick Debois.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055353253/iA2aZUhox.jpeg" alt="1.jpg" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055357797/REImV9UFt.jpeg" alt="2.jpg" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055360859/Bdsx9jxFJ.jpeg" alt="3.jpg" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055363456/J7rvvkOlc.jpeg" alt="4.jpg" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055366144/OHycroLF4.jpeg" alt="5.jpg" /></p>
<p><strong>DevOps Days Ghent: Day 1</strong></p>
<p>Joshua Zimmerman nos relatou que precisamos melhorar nossa comunicação: Communication IS THE KEY!! </p>
<p>Alguém pode nos falar que “DevOps não tem nada a ver com cultura”. Ao invés de simplesmente dizermos a ela que está errada, será mais impactante perguntar o porque ela pensa assim! </p>
<p>Ken Mugrage relatou a importância de “Times Empoderados”. Autonomia é a chave. Chega de micro-gerenciamento e hierarquias de comando e controle! Estamos no século 21! Quem não mudar o modo de pensar (especialmente líderes e gerentes) está fadado a ser varrido pela concorrência.</p>
<p>Julie Gund em sua palestra citou um dado muito interessante sobre Times de Alta Performance: Segurança Psicológica!!! Isto se dá através de: Autonomia, Estrutura, Clareza e Significado. </p>
<p>É muito interessante andar pelo evento e poder bater papo com pessoas como o Bryan Liles (lembra do TATFT?). </p>
<p>E no fim pude ter uma conversa com meu “novo brother” Patrick Debois aonde o mesmo pediu feedback sobre o evento e sugestões para melhorá-lo. Humildade em pessoa!! </p>
<p>E para finalizar o próprio Patrick nos deu dicas valiosas sobre como podemos elevar o nível do DevOpsDaysBH em assuntos como palestras e Open Spaces. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055478529/TVZu0wSxX.jpeg" alt="6.jpg" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055481364/OWa0b_Qkn.jpeg" alt="7.jpg" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055484153/uixXJniWy.jpeg" alt="8.jpg" /></p>
<p><strong>DevOps Days Ghent - Day 2</strong></p>
<ul>
<li>Você não pode comprar DevOps</li>
<li>Você não pode certificar cultura DevOps</li>
<li>Desenvolvedores deveriam estar resolvendo problemas utilizando tecnologia, não importa qual seja (use a que se adapte melhor aos seus problemas)</li>
<li>Se você não estiver resolvendo problemas você está desperdiçando tempo e dinheiro. </li>
</ul>
<p>Migrar o seu fluxo de trabalho para se adequar a DevOps não é um processo fácil. </p>
<p>A adoção de DevOps requer uma completa transformação. Os aspectos humanos como cultura e liderança são mais importantes que tecnologia.</p>
<p>Andrew Clay Shafer encerrou o evento numa palestra impactante e que sintetiza tudo o que DevOps quer comunicar (mas muitas vezes falhamos em passar esta mensagem):</p>
<ul>
<li>Devemos SEMPRE ajudar uns aos outros </li>
<li>Nós SEMPRE podemos fazer mais e melhor</li>
<li>Pessoas trabalhando juntas é melhor do que pessoas trabalhando isoladas (temos que ter senso de equipe) </li>
</ul>
<p>No fim de tudo se trata de PESSOAS. #DevOps é sobre colaboração, empatia e interesse genuíno em pessoas. De nada adiantam ferramentas se a cultura não é boa! </p>
<p>Obrigado a quem tornou este sonho possível: </p>
<p>Mike Rosado, Yvo van Doorn</p>
<p>Obrigado a quem nos apoiou grandemente nesta aventura: Estabilis</p>
<p>Obrigado pelo suporte: GrooveTech, Elastic</p>
<p>Vejo vocês nos próximos DevOps Days !!!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605055545460/QGScx5sRh.jpeg" alt="9.jpg" /></p>
]]></content:encoded></item></channel></rss>