CINXE.COM
What Serverless Computing Is and Should Become – Communications of the ACM
<!doctype html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="profile" href="https://gmpg.org/xfn/11"> <script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="095b91a6-f087-4380-b01d-e44b1c2af358" data-blockingmode="auto" type="text/javascript"></script> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-XYTVD2CXR4"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-XYTVD2CXR4'); </script> <title>What Serverless Computing Is and Should Become – Communications of the ACM</title> <meta name='robots' content='max-image-preview:large' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <link rel='dns-prefetch' href='//stats.wp.com' /> <link rel="alternate" type="application/rss+xml" title="Communications of the ACM » Feed" href="https://cacm.acm.org/feed/" /> <link rel="alternate" type="application/rss+xml" title="Communications of the ACM » Comments Feed" href="https://cacm.acm.org/comments/feed/" /> <link rel="alternate" type="application/rss+xml" title="Communications of the ACM » What Serverless Computing Is and Should Become: The Next Phase of Cloud Computing Comments Feed" href="https://cacm.acm.org/research/what-serverless-computing-is-and-should-become/feed/" /> <script class="wp-asset-manager usage-logger" type="text/javascript">window.amScripts = window.amScripts || {}; window.amScripts["usage-logger"] = {"nonce":"005d0b6943","id":117548,"type":"digital-library","doi":"10.1145\/3406011"}</script><style class="wp-asset-manager cacm-global-critical" type="text/css">@font-face{font-display:swap;font-family:Inter;font-style:normal;src:url(../be7cb18dc7caf47cf7e9.woff2) format("woff2"),url(../817c4274293e221c5076.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(../54321e26b8bf4739a16d.woff2) format("woff2"),url(../7ad0df5561cc0933cead.woff) format("woff")}@font-face{font-display:swap;font-family:Work Sans;font-style:normal;font-weight:500;src:url(../2dd7c3c79fd1aa1d85ca.woff2) format("woff2"),url(../9a8cbe3b3bec955df411.woff) format("woff")}@font-face{font-display:swap;font-family:Work Sans;font-style:normal;font-weight:700;src:url(../ab8702255905c24de1c1.woff2) format("woff2"),url(../9ab52d2504cfe145b9bd.woff) format("woff")}@font-face{font-display:swap;font-family:Work Sans;font-style:normal;font-weight:800;src:url(../cef488e4e9f273a0a1e3.woff2) format("woff2"),url(../a99bf2b51c426338ae2c.woff) format("woff")}html{box-sizing:border-box}html *,html :after,html :before{box-sizing:inherit}a,abbr,address,article,aside,audio,b,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}fieldset{border:none;margin:0;padding:0}button,input,select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:0;font:inherit;margin:0}button{background-color:transparent;padding:0}body,html{font-family:var(--wp--preset--font-family--inter);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{scroll-padding-top:var(--wp--custom--siteheader-height)!important}body{overflow-x:hidden}a img{display:block}img{height:auto;max-width:100%}svg{display:block}.container{margin-left:auto;margin-right:auto;width:calc(min(100%,var(--wp--style--global--wide-size) + var(--wp--custom--site-edge)*2) - var(--wp--custom--site-edge)*2)}.screen-reader-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;padding:0;width:1px}.screen-reader-only,.skip-link{overflow:hidden;position:absolute}.skip-link{margin-left:auto;margin-right:auto;background-color:var(--wp--preset--color--white);color:inherit;left:0;opacity:0;padding:.625rem;right:0;text-align:center;text-decoration:none;top:0;transform:translateY(-100%);width:-moz-max-content;width:max-content;z-index:-1}.skip-link:focus{opacity:1;transform:translateY(0);z-index:2147483647}.site-content{padding-top:var(--wp--custom--siteheader-height)}@media(min-width:48rem){.site-content{padding-top:var(--wp--custom--siteheader-height)}}.site-header-hamburger-menu[aria-hidden=true]{display:none}.site-header-membership-nav{align-self:stretch;display:flex;position:relative}.site-header--expanded .site-header-membership-nav,.site-header:not(.site-header--member-logged-in) .site-header-membership-nav{display:none}.site-header{position:fixed;width:100%;z-index:7}.site-header--expanded{height:100%}.site-header--no-js{opacity:0}.site-header.headroom{transition:transform .2s linear;will-change:transform}.site-header.headroom--pinned{transform:translateY(0)}.site-header.headroom--unpinned{height:auto;transform:translateY(-100%)}.site-header-container{align-items:center;background-color:var(--wp--preset--color--white);border-bottom:var(--wp--custom--border-gray);display:flex;gap:1rem;height:var(--wp--custom--siteheader-height);justify-content:space-between;padding:0 1rem}.site-header-container a{text-decoration:none}.site-header-container a:active,.site-header-container a:focus,.site-header-container a:hover{text-decoration:underline;text-decoration-color:inherit;text-decoration-thickness:1px;text-underline-offset:2.5px}@media(min-width:37.5rem){.site-header-container{padding:0 1.5rem}}@media(min-width:48rem){.site-header-container{padding:0 0 0 1rem}}@media(min-width:64rem){.site-header-container{gap:2.25rem}}@media(min-width:80rem){.site-header-container{gap:3rem}}.site-header--member-logged-in .site-header-container{padding:0 0 0 1rem}@media(min-width:37.5rem){.site-header--member-logged-in .site-header-container{padding:0 0 0 1.5rem}}.site-header--expanded .site-header-container{background-color:var(--wp--preset--color--cacm-darker-blue)}@media(max-width:47.9375rem){.site-header-logo,.site-header-search{margin-left:auto}}.site-header-member-login-link{font-weight:var(--wp--custom--font-weight-bold)}.site-header-member-login-link[aria-hidden=true]{visibility:hidden}@media(max-width:47.9375rem){.site-header-member-login-link{display:none}}.site-header--member-logged-in .site-header-member-login-link{display:none}.site-header-magazine-menu,.site-header-topics-menu{position:relative}.site-header-magazine-menu-toggle,.site-header-topics-menu-toggle{font-size:.9375rem;font-weight:var(--wp--custom--font-weight-regular);line-height:1.21;align-items:center;cursor:pointer;display:flex;gap:.3333333333rem}@media(min-width:80rem){.site-header-magazine-menu-toggle,.site-header-topics-menu-toggle{font-size:1rem;font-weight:var(--wp--custom--font-weight-regular);line-height:1.21;gap:.65625rem}}.site-header-magazine-menu-toggle[aria-hidden=true],.site-header-topics-menu-toggle[aria-hidden=true]{visibility:hidden}.site-header-magazine-menu-toggle[aria-expanded=true]>svg,.site-header-topics-menu-toggle[aria-expanded=true]>svg{transform:rotate(180deg)}.site-header-magazine-menu-toggle:focus,.site-header-magazine-menu-toggle:hover,.site-header-topics-menu-toggle:focus,.site-header-topics-menu-toggle:hover{text-decoration:underline}.site-header-magazine-menu-expanded,.site-header-topics-menu-expanded{background-color:var(--wp--preset--color--white);border-radius:.3125rem;box-shadow:0 .125rem .25rem -.125rem rgba(24,39,75,.12),0 .25rem .25rem -.125rem rgba(24,39,75,.08);display:flex;gap:1.875rem;justify-content:space-between;padding:1.75rem 1.875rem 1.5rem;position:absolute;right:0;text-align:left;top:2.28125rem;white-space:nowrap;z-index:4}.site-header-magazine-menu-expanded[aria-hidden=true],.site-header-topics-menu-expanded[aria-hidden=true]{display:none}@media(max-width:47.9375rem){.site-header-magazine-menu,.site-header-topics-menu{display:none}}.site-header:not(.site-header--member-logged-in) .site-header-topics-menu-expanded{left:0;right:auto}</style><style class="wp-asset-manager cacm-article-critical" type="text/css">.article-header{left:50%;margin-left:-50vw;margin-right:-50vw;position:relative;right:50%;width:100vw;background-color:var(--cacm--article-header--background-color);border-bottom:1px solid var(--cacm--article-header--border-color);color:var(--cacm--article-header--text-color);margin-bottom:var(--wp--custom--gap)}@media(min-width:48rem){.article-header{grid-area:header;margin-bottom:1.5rem}}.article-header__inner{--wp--custom--vertical-block-rhythm:0.5rem;padding:2rem 0 0}@media(min-width:48rem){.article-header__inner{--wp--custom--vertical-block-rhythm:0.625rem;display:grid;gap:0 var(--cacm--article--gap);grid-template-columns:auto 1fr;padding:var(--cacm--article--gap) 0}}@media(min-width:64rem){.article-header__inner{grid-template-columns:var(--cacm--article--sidebarleft--width) 1fr}}.article-header__section{margin-bottom:var(--wp--custom--vertical-block-rhythm);display:inline-block}.article-header__section:last-child{margin-bottom:0}.article-header__section a{text-decoration:none}.article-header__section a:active,.article-header__section a:focus,.article-header__section a:hover{text-decoration:underline;text-decoration-color:inherit;text-decoration-thickness:1px;text-underline-offset:2.5px}@media(max-width:47.9375rem){.article-header__section{margin-right:.625rem}}@media(min-width:48rem){.article-header__section{grid-column:1/1;text-align:right}}.article-header__section>a{font-size:.875rem;font-weight:700;line-height:1.2142857143;background-color:var(--cacm--article-header--button--background-color);color:var(--cacm--article-header--button--text-color);display:inline-block;padding:.3125rem .625rem;text-transform:uppercase}@media(min-width:48rem){.article-header__figure,.article-header__meta,.article-header__share,.article-header__subtitle,.article-header__title,.article-header__topic-and-issue-section{grid-column:2/2}}.article-header__topic-and-issue-section{--wp--custom--vertical-block-rhythm:0.5rem;margin-bottom:var(--wp--custom--vertical-block-rhythm);font-size:.9375rem;line-height:1.5333333333;font-family:var(--wp--preset--font-family--inter);display:flex;flex-direction:column}.article-header__topic-and-issue-section:last-child{margin-bottom:0}@media(min-width:48rem){.article-header__topic-and-issue-section{--wp--custom--vertical-block-rhythm:1.25rem;align-items:center;flex-direction:row;gap:2rem}}.article-header__issue-section{color:var(--cacm--article-header--text-color)}.article-header__title{margin-bottom:var(--wp--custom--vertical-block-rhythm);font-family:var(--wp--preset--font-family--work-sans);font-size:var(--wp--preset--font-size--work-md);line-height:32.2px;font-weight:var(--wp--custom--font-weight-extrabold)}.article-header__title:last-child{margin-bottom:0}@media(min-width:48rem){.article-header__title{font-size:var(--wp--preset--font-size--work-xxxl);line-height:50.4px;font-weight:var(--wp--custom--font-weight-extrabold)}}@media(min-width:64rem){.article-header__title{font-size:var(--wp--preset--font-size--work-xxl);line-height:44.28px;font-weight:var(--wp--custom--font-weight-extrabold)}}.article-header__subtitle{font-family:var(--wp--preset--font-family--work-sans);font-size:var(--wp--preset--font-size--work-xxs);line-height:22.5px;font-weight:var(--wp--custom--font-weight-bold);font-size:1.3125rem;line-height:1.2380952381;letter-spacing:-.08px;font-weight:var(--wp--custom--font-weight-medium);letter-spacing:-.03125rem;margin-bottom:.125rem}.article-header__subtitle:last-child{margin-bottom:0}.article-header__subtitle a{word-break:break-word}.article-header__subtitle b,.article-header__subtitle strong{font-weight:var(--wp--custom--font-weight-bold)}.article-header__subtitle em,.article-header__subtitle i{font-style:italic}.article-header__subtitle del,.article-header__subtitle strike{text-decoration:line-through}.article-header__subtitle sub,.article-header__subtitle sup{font-size:75%;line-height:0;position:relative}.article-header__subtitle sub{bottom:-.25em}.article-header__subtitle sup{top:-.5em}.article-header__subtitle .monospace,.article-header__subtitle p code{font:var(--wp--custom--font-weight-regular) 90%/1.6 Courier,monospace}@media(min-width:48rem){.article-header__subtitle{--wp--custom--vertical-block-rhythm:1.25rem;font-family:var(--wp--preset--font-family--work-sans);font-size:var(--wp--preset--font-size--work-xs);line-height:25.2px;font-weight:var(--wp--custom--font-weight-bold);font-size:1.5625rem;line-height:1.2;letter-spacing:-.1px;font-weight:var(--wp--custom--font-weight-medium);letter-spacing:-.03125rem;margin:.5rem 0 .625rem}.article-header__subtitle:last-child{margin-bottom:0}}.article-header__meta{margin-bottom:var(--wp--custom--vertical-block-rhythm);font-size:.9375rem;line-height:1.5333333333;font-family:var(--wp--preset--font-family--inter);display:flex;flex-direction:column}.article-header__meta:last-child{margin-bottom:0}.article-header__meta>*{margin-bottom:var(--wp--custom--vertical-block-rhythm)}.article-header__meta>:last-child{margin-bottom:0}.article-header__byline{margin-top:.625rem}.article-header__byline>a{border-bottom:1px dotted var(--cacm--article-header--byline--text-color);color:var(--cacm--article-header--byline--text-color);text-decoration:none}@media(max-width:47.9375rem){.article-header__figure{left:50%;margin-left:-50vw;margin-right:-50vw;position:relative;right:50%;width:100vw}}@media(min-width:48rem){.article-header__figure{display:flex;flex-direction:column}}.article-header__figure .image-wrapper{margin-bottom:var(--wp--custom--vertical-block-rhythm)}.article-header__figure .image-wrapper:last-child{margin-bottom:0}@media(min-width:64rem){.article-header__figure .image-wrapper{grid-column:1/1}}.article-header__figure .image-wrapper>img{-o-object-fit:cover;object-fit:cover}.article-header__figure .video-wrapper{height:100%;overflow:hidden;position:relative;width:100%;padding-bottom:56.25%}.article-header__figure .video-wrapper>iframe{height:100%;left:0;-o-object-fit:contain;object-fit:contain;position:absolute;top:0;width:100%}.article-header__figure .video-wrapper>:not(iframe){display:none}.article-header__figure figcaption{font-size:.9375rem;line-height:1.4666666667;font-family:var(--wp--preset--font-family--inter);color:var(--cacm--article-header--caption--text-color)}@media(max-width:47.9375rem){.article-header__figure figcaption{margin:0 var(--wp--custom--site-edge)}}@media(min-width:64rem){.article-header__figure figcaption{grid-column:2/2;margin:0}}.article-header__figure figcaption>p.article-header--credit{font-style:italic}</style><link rel="preload" href="https://cacm.acm.org/wp-content/themes/cacm/client/src/fonts/inter-v12-latin-regular.woff2" class="wp-asset-manager cacm-font-inter-regular-woff2" as="font" media="all" type="font/woff2" crossorigin /><link rel="preload" href="https://cacm.acm.org/wp-content/themes/cacm/client/src/fonts/inter-v12-latin-700.woff2" class="wp-asset-manager cacm-font-inter-700-woff2" as="font" media="all" type="font/woff2" crossorigin /><link rel="preload" href="https://cacm.acm.org/wp-content/themes/cacm/client/src/fonts/work-sans-bold.woff2?ver=1.0.0" class="wp-asset-manager cacm-font-work-sans-700-woff2" as="style" media="all" type="font/woff2" /><link rel="preload" href="https://cacm.acm.org/wp-content/themes/cacm/client/src/fonts/work-sans-extrabold.woff2?ver=1.0.0" class="wp-asset-manager cacm-font-work-sans-800-woff2" as="style" media="all" type="font/woff2" /><script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/cacm.acm.org\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.7.1"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://cacm.acm.org/wp-includes/css/dist/block-library/style.min.css?ver=6.7.1' type='text/css' media='all' /> <link rel='stylesheet' id='mediaelement-css' href='https://cacm.acm.org/wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css?ver=4.2.17' type='text/css' media='all' /> <link rel='stylesheet' id='wp-mediaelement-css' href='https://cacm.acm.org/wp-includes/js/mediaelement/wp-mediaelement.min.css?ver=6.7.1' type='text/css' media='all' /> <style id='jetpack-sharing-buttons-style-inline-css' type='text/css'> .jetpack-sharing-buttons__services-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:0;list-style-type:none;margin:5px;padding:0}.jetpack-sharing-buttons__services-list.has-small-icon-size{font-size:12px}.jetpack-sharing-buttons__services-list.has-normal-icon-size{font-size:16px}.jetpack-sharing-buttons__services-list.has-large-icon-size{font-size:24px}.jetpack-sharing-buttons__services-list.has-huge-icon-size{font-size:36px}@media print{.jetpack-sharing-buttons__services-list{display:none!important}}.editor-styles-wrapper .wp-block-jetpack-sharing-buttons{gap:0;padding-inline-start:0}ul.jetpack-sharing-buttons__services-list.has-background{padding:1.25em 2.375em} </style> <style id='elasticpress-facet-style-inline-css' type='text/css'> .widget_ep-facet input[type=search],.wp-block-elasticpress-facet input[type=search]{margin-bottom:1rem}.widget_ep-facet .searchable .inner,.wp-block-elasticpress-facet .searchable .inner{max-height:20em;overflow:scroll}.widget_ep-facet .term.hide,.wp-block-elasticpress-facet .term.hide{display:none}.widget_ep-facet .empty-term,.wp-block-elasticpress-facet .empty-term{opacity:.5;position:relative}.widget_ep-facet .empty-term:after,.wp-block-elasticpress-facet .empty-term:after{bottom:0;content:" ";display:block;left:0;position:absolute;right:0;top:0;width:100%;z-index:2}.widget_ep-facet .level-1,.wp-block-elasticpress-facet .level-1{padding-left:20px}.widget_ep-facet .level-2,.wp-block-elasticpress-facet .level-2{padding-left:40px}.widget_ep-facet .level-3,.wp-block-elasticpress-facet .level-3{padding-left:60px}.widget_ep-facet .level-4,.wp-block-elasticpress-facet .level-4{padding-left:5pc}.widget_ep-facet .level-5,.wp-block-elasticpress-facet .level-5{padding-left:75pt}.widget_ep-facet input[disabled],.wp-block-elasticpress-facet input[disabled]{cursor:pointer;opacity:1}.widget_ep-facet .term a,.wp-block-elasticpress-facet .term a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.widget_ep-facet .term a:hover .ep-checkbox,.wp-block-elasticpress-facet .term a:hover .ep-checkbox{background-color:#ccc}.ep-checkbox{-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:#eee;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;height:1em;justify-content:center;margin-right:.25em;width:1em}.ep-checkbox:after{border:solid #fff;border-width:0 .125em .125em 0;content:"";display:none;height:.5em;-webkit-transform:rotate(45deg);transform:rotate(45deg);width:.25em}.ep-checkbox.checked{background-color:#5e5e5e}.ep-checkbox.checked:after{display:block} </style> <link rel='stylesheet' id='elasticpress-related-posts-block-css' href='https://cacm.acm.org/wp-content/mu-plugins/search/elasticpress/dist/css/related-posts-block-styles.min.css?ver=4.2.2' type='text/css' media='all' /> <style id='global-styles-inline-css' type='text/css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--cacm-blue: #337AB5;--wp--preset--color--cacm-link-blue: #015FAC;--wp--preset--color--cacm-dark-blue: #1E4A88;--wp--preset--color--cacm-darker-blue: #29303C;--wp--preset--color--cacm-light-blue: #B6DEFF;--wp--preset--color--cacm-peach: #F7ACA5;--wp--preset--color--cacm-beige: #F5F2DC;--wp--preset--color--cacm-brown: #8C6A54;--wp--preset--color--cacm-green: #5F7D05;--wp--preset--color--cacm-light-green: #EFF7F1;--wp--preset--color--cacm-black: #141414;--wp--preset--color--cacm-gray-100: #FBFCFC;--wp--preset--color--cacm-gray-200: #F8F9FA;--wp--preset--color--cacm-gray-300: #EBEDEF;--wp--preset--color--cacm-gray-500: #A9ACB1;--wp--preset--color--cacm-gray-600: #5A6875;--wp--preset--color--cacm-gray-700: #3D4550;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--gradient--primary-gradient: linear-gradient(90deg, #80C2EF 0%, #337AB5 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-size--work-xxxs: 16px;--wp--preset--font-size--work-xxs: 18px;--wp--preset--font-size--work-xs: 21px;--wp--preset--font-size--work-sm: 25px;--wp--preset--font-size--work-md: 28px;--wp--preset--font-size--work-lg: 33px;--wp--preset--font-size--work-xl: 37px;--wp--preset--font-size--work-xxl: 41px;--wp--preset--font-size--work-xxxl: 48px;--wp--preset--font-size--inter-xxxs: 15px;--wp--preset--font-size--inter-xxs: 18px;--wp--preset--font-size--inter-xs: 21px;--wp--preset--font-size--inter-sm: 24px;--wp--preset--font-size--inter-md: 28px;--wp--preset--font-size--inter-lg: 32px;--wp--preset--font-size--inter-xl: 36px;--wp--preset--font-size--inter-xxl: 41px;--wp--preset--font-size--inter-xxxl: 47px;--wp--preset--font-family--inter: 'Inter', helvetica, arial, sans-serif;--wp--preset--font-family--work-sans: 'Work Sans', helvetica, arial, sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);--wp--custom--adminbar-height: 0px;--wp--custom--siteheader-height: 72px;--wp--custom--site-edge: 20px;--wp--custom--gap: 40px;--wp--custom--gap-half: calc(var(--wp--custom--gap) / 2);--wp--custom--section-background-color: transparent;--wp--custom--placeholder-background-color: var(--wp--preset--color--cacm-gray-200);--wp--custom--vertical-block-rhythm: 40px;--wp--custom--border-gray: 1px solid var(--wp--preset--color--cacm-gray-300);--wp--custom--font-weight-regular: 400;--wp--custom--font-weight-medium: 500;--wp--custom--font-weight-bold: 700;--wp--custom--font-weight-extrabold: 900;}.wp-block-heading{--wp--preset--font-size--work-xxs: 18px;--wp--preset--font-size--work-xs: 21px;--wp--preset--font-size--work-sm: 25px;--wp--preset--font-size--work-md: 28px;--wp--preset--font-size--work-lg: 33px;--wp--preset--font-size--work-xl: 41px;}:root { --wp--style--global--content-size: 1280px;--wp--style--global--wide-size: 1280px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}a:where(:not(.wp-element-button)){text-decoration: underline;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;line-height: inherit;padding: calc(0.667em + 2px) calc(1.333em + 2px);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-cacm-blue-color{color: var(--wp--preset--color--cacm-blue) !important;}.has-cacm-link-blue-color{color: var(--wp--preset--color--cacm-link-blue) !important;}.has-cacm-dark-blue-color{color: var(--wp--preset--color--cacm-dark-blue) !important;}.has-cacm-darker-blue-color{color: var(--wp--preset--color--cacm-darker-blue) !important;}.has-cacm-light-blue-color{color: var(--wp--preset--color--cacm-light-blue) !important;}.has-cacm-peach-color{color: var(--wp--preset--color--cacm-peach) !important;}.has-cacm-beige-color{color: var(--wp--preset--color--cacm-beige) !important;}.has-cacm-brown-color{color: var(--wp--preset--color--cacm-brown) !important;}.has-cacm-green-color{color: var(--wp--preset--color--cacm-green) !important;}.has-cacm-light-green-color{color: var(--wp--preset--color--cacm-light-green) !important;}.has-cacm-black-color{color: var(--wp--preset--color--cacm-black) !important;}.has-cacm-gray-100-color{color: var(--wp--preset--color--cacm-gray-100) !important;}.has-cacm-gray-200-color{color: var(--wp--preset--color--cacm-gray-200) !important;}.has-cacm-gray-300-color{color: var(--wp--preset--color--cacm-gray-300) !important;}.has-cacm-gray-500-color{color: var(--wp--preset--color--cacm-gray-500) !important;}.has-cacm-gray-600-color{color: var(--wp--preset--color--cacm-gray-600) !important;}.has-cacm-gray-700-color{color: var(--wp--preset--color--cacm-gray-700) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-cacm-blue-background-color{background-color: var(--wp--preset--color--cacm-blue) !important;}.has-cacm-link-blue-background-color{background-color: var(--wp--preset--color--cacm-link-blue) !important;}.has-cacm-dark-blue-background-color{background-color: var(--wp--preset--color--cacm-dark-blue) !important;}.has-cacm-darker-blue-background-color{background-color: var(--wp--preset--color--cacm-darker-blue) !important;}.has-cacm-light-blue-background-color{background-color: var(--wp--preset--color--cacm-light-blue) !important;}.has-cacm-peach-background-color{background-color: var(--wp--preset--color--cacm-peach) !important;}.has-cacm-beige-background-color{background-color: var(--wp--preset--color--cacm-beige) !important;}.has-cacm-brown-background-color{background-color: var(--wp--preset--color--cacm-brown) !important;}.has-cacm-green-background-color{background-color: var(--wp--preset--color--cacm-green) !important;}.has-cacm-light-green-background-color{background-color: var(--wp--preset--color--cacm-light-green) !important;}.has-cacm-black-background-color{background-color: var(--wp--preset--color--cacm-black) !important;}.has-cacm-gray-100-background-color{background-color: var(--wp--preset--color--cacm-gray-100) !important;}.has-cacm-gray-200-background-color{background-color: var(--wp--preset--color--cacm-gray-200) !important;}.has-cacm-gray-300-background-color{background-color: var(--wp--preset--color--cacm-gray-300) !important;}.has-cacm-gray-500-background-color{background-color: var(--wp--preset--color--cacm-gray-500) !important;}.has-cacm-gray-600-background-color{background-color: var(--wp--preset--color--cacm-gray-600) !important;}.has-cacm-gray-700-background-color{background-color: var(--wp--preset--color--cacm-gray-700) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-cacm-blue-border-color{border-color: var(--wp--preset--color--cacm-blue) !important;}.has-cacm-link-blue-border-color{border-color: var(--wp--preset--color--cacm-link-blue) !important;}.has-cacm-dark-blue-border-color{border-color: var(--wp--preset--color--cacm-dark-blue) !important;}.has-cacm-darker-blue-border-color{border-color: var(--wp--preset--color--cacm-darker-blue) !important;}.has-cacm-light-blue-border-color{border-color: var(--wp--preset--color--cacm-light-blue) !important;}.has-cacm-peach-border-color{border-color: var(--wp--preset--color--cacm-peach) !important;}.has-cacm-beige-border-color{border-color: var(--wp--preset--color--cacm-beige) !important;}.has-cacm-brown-border-color{border-color: var(--wp--preset--color--cacm-brown) !important;}.has-cacm-green-border-color{border-color: var(--wp--preset--color--cacm-green) !important;}.has-cacm-light-green-border-color{border-color: var(--wp--preset--color--cacm-light-green) !important;}.has-cacm-black-border-color{border-color: var(--wp--preset--color--cacm-black) !important;}.has-cacm-gray-100-border-color{border-color: var(--wp--preset--color--cacm-gray-100) !important;}.has-cacm-gray-200-border-color{border-color: var(--wp--preset--color--cacm-gray-200) !important;}.has-cacm-gray-300-border-color{border-color: var(--wp--preset--color--cacm-gray-300) !important;}.has-cacm-gray-500-border-color{border-color: var(--wp--preset--color--cacm-gray-500) !important;}.has-cacm-gray-600-border-color{border-color: var(--wp--preset--color--cacm-gray-600) !important;}.has-cacm-gray-700-border-color{border-color: var(--wp--preset--color--cacm-gray-700) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-primary-gradient-gradient-background{background: var(--wp--preset--gradient--primary-gradient) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-work-xxxs-font-size{font-size: var(--wp--preset--font-size--work-xxxs) !important;}.has-work-xxs-font-size{font-size: var(--wp--preset--font-size--work-xxs) !important;}.has-work-xs-font-size{font-size: var(--wp--preset--font-size--work-xs) !important;}.has-work-sm-font-size{font-size: var(--wp--preset--font-size--work-sm) !important;}.has-work-md-font-size{font-size: var(--wp--preset--font-size--work-md) !important;}.has-work-lg-font-size{font-size: var(--wp--preset--font-size--work-lg) !important;}.has-work-xl-font-size{font-size: var(--wp--preset--font-size--work-xl) !important;}.has-work-xxl-font-size{font-size: var(--wp--preset--font-size--work-xxl) !important;}.has-work-xxxl-font-size{font-size: var(--wp--preset--font-size--work-xxxl) !important;}.has-inter-xxxs-font-size{font-size: var(--wp--preset--font-size--inter-xxxs) !important;}.has-inter-xxs-font-size{font-size: var(--wp--preset--font-size--inter-xxs) !important;}.has-inter-xs-font-size{font-size: var(--wp--preset--font-size--inter-xs) !important;}.has-inter-sm-font-size{font-size: var(--wp--preset--font-size--inter-sm) !important;}.has-inter-md-font-size{font-size: var(--wp--preset--font-size--inter-md) !important;}.has-inter-lg-font-size{font-size: var(--wp--preset--font-size--inter-lg) !important;}.has-inter-xl-font-size{font-size: var(--wp--preset--font-size--inter-xl) !important;}.has-inter-xxl-font-size{font-size: var(--wp--preset--font-size--inter-xxl) !important;}.has-inter-xxxl-font-size{font-size: var(--wp--preset--font-size--inter-xxxl) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-work-sans-font-family{font-family: var(--wp--preset--font-family--work-sans) !important;}.wp-block-heading.has-work-xxs-font-size{font-size: var(--wp--preset--font-size--work-xxs) !important;}.wp-block-heading.has-work-xs-font-size{font-size: var(--wp--preset--font-size--work-xs) !important;}.wp-block-heading.has-work-sm-font-size{font-size: var(--wp--preset--font-size--work-sm) !important;}.wp-block-heading.has-work-md-font-size{font-size: var(--wp--preset--font-size--work-md) !important;}.wp-block-heading.has-work-lg-font-size{font-size: var(--wp--preset--font-size--work-lg) !important;}.wp-block-heading.has-work-xl-font-size{font-size: var(--wp--preset--font-size--work-xl) !important;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='qm-object-cache-style-css' href='https://cacm.acm.org/wp-content/mu-plugins/qm-plugins/qm-object-cache/css/style.css?ver=0.2' type='text/css' media='all' /> <link rel='stylesheet' id='cacm-global-css' href='https://cacm.acm.org/wp-content/themes/cacm/client/build/css/global.min.css?ver=6f460684b3d49b0b7b10' type='text/css' media='all' /> <link rel='stylesheet' id='cacm-article-css' href='https://cacm.acm.org/wp-content/themes/cacm/client/build/css/article.min.css?ver=34500f5fcb3e83888a6c' type='text/css' media='all' /> <link rel="https://api.w.org/" href="https://cacm.acm.org/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://cacm.acm.org/wp-json/wp/v2/digital-library/117548" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://cacm.acm.org/xmlrpc.php?rsd" /> <meta name="generator" content="WordPress 6.7.1" /> <link rel="canonical" href="https://cacm.acm.org/research/what-serverless-computing-is-and-should-become/" /> <link rel='shortlink' href='https://cacm.acm.org/?p=117548' /> <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://cacm.acm.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcacm.acm.org%2Fresearch%2Fwhat-serverless-computing-is-and-should-become%2F" /> <link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://cacm.acm.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcacm.acm.org%2Fresearch%2Fwhat-serverless-computing-is-and-should-become%2F&format=xml" /> <style> .getty.aligncenter { text-align: center; } .getty.alignleft { float: none; margin-right: 0; } .getty.alignleft > div { float: left; margin-right: 5px; } .getty.alignright { float: none; margin-left: 0; } .getty.alignright > div { float: right; margin-left: 5px; } </style> <style>img#wpstats{display:none}</style> <link rel="icon" href="https://cacm.acm.org/wp-content/uploads/2023/11/cropped-cropped-cacm_favicon-1.png?w=32" sizes="32x32" /> <link rel="icon" href="https://cacm.acm.org/wp-content/uploads/2023/11/cropped-cropped-cacm_favicon-1.png?w=192" sizes="192x192" /> <link rel="apple-touch-icon" href="https://cacm.acm.org/wp-content/uploads/2023/11/cropped-cropped-cacm_favicon-1.png?w=180" /> <meta name="msapplication-TileImage" content="https://cacm.acm.org/wp-content/uploads/2023/11/cropped-cropped-cacm_favicon-1.png?w=270" /> </head> <body class="digital-library-template-default single single-digital-library postid-117548"> <svg xmlns="http://www.w3.org/2000/svg" focusable="false" height="0" role="none" style="left:-9999px;overflow:hidden;position:absolute" viewBox="0 0 0 0" width="0"><symbol id="am-symbol-icon-arrow-left" viewBox="0 0 18 12"><path clip-rule="evenodd" d="M18 6a.643.643 0 0 1-.643.643H2.196l4.046 4.044a.644.644 0 0 1-.91.91L.188 6.456a.643.643 0 0 1 0-.91L5.33.402a.644.644 0 1 1 .91.91L2.197 5.358h15.161A.643.643 0 0 1 18 6Z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-arrow-right" viewBox="0 0 14 9"><path clip-rule="evenodd" d="M0 4.5A.5.5 0 0 1 .5 4h11.793L9.146.854a.5.5 0 1 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L12.293 5H.5a.5.5 0 0 1-.5-.5Z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-comment" viewBox="0 0 19 20"><path clip-rule="evenodd" d="M1.781 1.542a.693.693 0 0 0-.693.693v11.876a.693.693 0 0 0 .693.693h2.375c.273 0 .494.221.494.494v2.574l3.96-2.97a.494.494 0 0 1 .296-.098h8.313a.693.693 0 0 0 .693-.694V2.236a.693.693 0 0 0-.693-.693H1.78ZM.592 1.046a1.681 1.681 0 0 1 1.19-.492h15.437A1.681 1.681 0 0 1 18.9 2.235v11.876a1.681 1.681 0 0 1-1.681 1.681H9.07l-4.618 3.464a.494.494 0 0 1-.79-.396v-3.068H1.78A1.682 1.682 0 0 1 .1 14.111V2.235c0-.446.177-.873.492-1.189Z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-digital-library" viewBox="43 0 40 40"><g clip-path="url(#a)"> <path d="m95.468 15.585-1.58 1.579c-.262.263-.584.41-.964.41h-6.813V4.707h6.813c.38 0 .702.146.965.409l1.579 1.579c.263.263.41.585.41.965v6.959c0 .38-.118.702-.41.965zm-1.9-7.544c0-.088-.03-.205-.118-.263l-.76-.76c-.088-.088-.146-.117-.263-.117H88.42v8.45h4.006c.117 0 .205-.03.263-.117l.76-.76a.357.357 0 0 0 .117-.264V8.04zm5.877 9.532v-2.047h2.309V6.754h-2.31V4.708h6.93v2.046h-2.31v8.772h2.31v2.047h-6.93zm19.853 0-.292-1.637-1.228 1.228c-.263.263-.585.41-.965.41h-3.918c-.38 0-.702-.147-.965-.41l-1.579-1.58a1.326 1.326 0 0 1-.409-.964V7.66c0-.38.146-.7.409-.964l1.579-1.579c.263-.263.585-.41.965-.41h5c.38 0 .701.147.965.41l1.666 1.667-1.549 1.55-1.316-1.316c-.088-.088-.146-.117-.263-.117h-4.006c-.117 0-.205.029-.263.117l-.761.76a.36.36 0 0 0-.117.263v6.199c0 .088.03.204.117.263l.761.76c.087.088.146.117.263.117h3.041c.117 0 .204-.03.263-.117l1.754-1.754c.088-.088.117-.146.117-.263v-.995h-3.187V10.06h5.497v4.97l.497 2.573h-2.076v-.029zm5.38 0v-2.047h2.31V6.754h-2.31V4.708h6.93v2.046h-2.31v8.772h2.31v2.047h-6.93zM140.029 6.9v10.644h-2.31V6.9h-3.713V4.708h9.737V6.9h-3.714zm14.299 10.673-1.229-3.216h-5.117l-1.228 3.216h-2.31l4.767-12.865h2.748l4.708 12.865h-2.339zm-3.772-10.38-1.784 5.088h3.567l-1.783-5.088zM160 17.573V4.708h2.31V15.35h6.316v2.193H160v.03zM86.111 35.41V22.543h2.31v10.643h6.316v2.193H86.11v.03zm11.813 0v-2.047h2.31V24.59h-2.31v-2.047h6.93v2.047h-2.31v8.772h2.31v2.046h-6.93zm20.497-1.638-1.257 1.257a1.28 1.28 0 0 1-.936.38h-7.164V22.544h7.164c.38 0 .673.146.936.38l1.257 1.257c.263.263.409.585.409.965v1.755c0 .38-.146.701-.409.965l-1.111 1.11 1.111 1.112c.263.263.409.584.409.965v1.783c0 .322-.146.673-.409.936zm-1.901-8.216c0-.117-.029-.205-.116-.264l-.439-.438c-.088-.088-.146-.117-.263-.117h-4.328v3.129h3.86c.088 0 .205-.03.263-.117l.877-.878c.088-.087.117-.146.117-.263v-1.052h.029zm0 5.789c0-.117-.029-.205-.116-.263l-.936-.936c-.088-.088-.146-.117-.263-.117h-3.831v3.158h4.328c.087 0 .204-.03.263-.117l.439-.438c.087-.088.116-.147.116-.264v-1.023zm14.65 4.065-3.802-4.884a.402.402 0 0 0-.321-.175h-1.404v5.058h-2.31V22.544h7.164c.38 0 .673.146.936.38l1.257 1.257c.263.263.409.585.409.965v2.544c0 .38-.146.702-.409.965l-1.257 1.257c-.263.263-.556.38-.936.38h-.468l3.977 5.059h-2.836v.058zm-.381-9.854c0-.117-.029-.205-.116-.264l-.439-.438c-.088-.088-.146-.117-.263-.117h-4.328v3.392h4.328c.117 0 .204-.03.263-.117l.439-.41c.087-.087.116-.146.116-.263v-1.783zm15.117 9.854-1.228-3.217h-5.117l-1.228 3.216h-2.31l4.766-12.865h2.749l4.708 12.865h-2.34zm-3.772-10.38-1.783 5.087h3.538l-1.755-5.088zm17.106 10.38-3.801-4.884a.405.405 0 0 0-.322-.175h-1.404v5.058h-2.309V22.544h7.163c.38 0 .673.146.936.38l1.257 1.257c.263.263.41.585.41.965v2.544c0 .38-.147.702-.41.965l-1.257 1.257c-.263.263-.556.38-.936.38h-.468l3.977 5.059h-2.836v.058zm-.41-9.854c0-.117-.029-.205-.117-.264l-.438-.438c-.088-.088-.146-.117-.263-.117h-4.328v3.392h4.328c.117 0 .204-.03.263-.117l.438-.41c.088-.087.117-.146.117-.263v-1.783zm11.696 4.152v5.672h-2.31v-5.672l-4.356-7.164h2.514l3.012 5 2.982-5h2.486l-4.328 7.164zM12.193 26.199 7.485 13.363H4.737L0 26.199h2.31l1.199-3.216h5.117l1.199 3.216h2.368zm-4.327-5.263h-3.54l1.784-5.088 1.755 5.088zm15.818 3.187-1.55-1.55-1.315 1.316c-.088.088-.146.117-.263.117h-3.188c-.116 0-.204-.03-.263-.117l-.76-.76a.357.357 0 0 1-.117-.264v-6.17c0-.087.03-.204.117-.262l.76-.76c.088-.088.146-.117.263-.117h3.188c.116 0 .204.029.263.117l1.316 1.315 1.55-1.55-1.668-1.666a1.326 1.326 0 0 0-.964-.41H16.87c-.38 0-.701.147-.965.41l-1.579 1.579a1.326 1.326 0 0 0-.409.965v6.959c0 .38.146.702.41.965l1.578 1.579c.264.263.585.41.965.41h4.182c.38 0 .701-.147.964-.41l1.667-1.696zm15.79 2.076V13.363h-3.538l-3.041 9.941-3.041-9.941h-3.538v12.836h2.251V15.994L31.696 26.2h2.398l3.128-10.205V26.2h2.252zM58.246 3.421l-5.351-1.403-1.404 5.35 3.86-1.052 2.895-2.895zm-4.474 4.532-7.72 2.106 1.17 4.385 6.55-6.49zm26.17 6.988 1.432-5.467-5.35-1.375 1.081 4.065 2.837 2.777zm-33.1 10.205-1.433 5.38 5.351 1.375-1.052-3.89-2.866-2.865zM73.333 2.66 68.89 3.89l6.579 6.579-2.135-7.807zm-.409 29.416 7.836-2.134-1.228-4.474-6.608 6.608zM68.45 36.55l5.468 1.433 1.404-5.351-4.065 1.081-2.807 2.837zm-15 .79 4.386-1.17-6.462-6.492 2.076 7.661zm26.2-13.656L83.332 20 71.637 8.304l-4.561-4.561L63.333 0l-6.52 6.52-9.708 9.708L43.333 20l6.58 6.579 9.707 9.707L63.333 40l6.492-6.491 9.824-9.825zm-16.434-.643c0 .35-.117.672-.38.906l-1.491 1.492c-.263.263-.556.38-.906.38h-6.462V13.626h6.462c.35 0 .672.117.906.38l1.491 1.491c.263.263.38.556.38.907v6.637zm3.597-9.415h2.193v10.117H75v2.076h-8.187V13.626z"></path> <path d="M60.205 15.819a.37.37 0 0 0-.264-.117h-3.8v8.04h3.8c.117 0 .176-.029.264-.116l.701-.702c.059-.088.117-.175.117-.263v-5.877a.357.357 0 0 0-.117-.264l-.701-.701z"></path> </g><defs> <clipPath id="a"> <path d="M0 0h174.854v40H0z"></path> </clipPath> </defs></symbol><symbol id="am-symbol-icon-pdf-download" viewBox="0 0 19 20"><path clip-rule="evenodd" d="M1.781 1.542a.693.693 0 0 0-.693.693v13.063a.693.693 0 0 0 .693.694h4.75a.494.494 0 1 1 0 .988h-4.75A1.682 1.682 0 0 1 .1 15.298V2.235A1.681 1.681 0 0 1 1.78.554h8.415c.446 0 .873.177 1.188.492l2.274 2.274c.315.315.492.743.492 1.188v2.477a.494.494 0 1 1-.988 0V4.508a.694.694 0 0 0-.203-.49m0 0-2.273-2.273a.694.694 0 0 0-.49-.203H1.78m11.875 8.312a4.256 4.256 0 1 0 0 8.512 4.256 4.256 0 0 0 0-8.512Zm-5.244 4.257a5.244 5.244 0 1 1 10.488 0 5.244 5.244 0 0 1-10.488 0Zm5.244-2.87c.273 0 .494.222.494.495v3.557l.938-.938a.494.494 0 0 1 .699.698l-1.782 1.782a.494.494 0 0 1-.698 0l-1.781-1.782a.494.494 0 0 1 .698-.698l.938.938v-3.557c0-.273.221-.495.494-.495Z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-print" viewBox="0 0 19 20"><path clip-rule="evenodd" d="M5.344 1.541a.693.693 0 0 0-.694.693v3.069h9.7V2.234a.693.693 0 0 0-.694-.693H5.344Zm9.994 3.762V2.234A1.681 1.681 0 0 0 13.656.553H5.344a1.681 1.681 0 0 0-1.682 1.681v3.069h-1.88A1.682 1.682 0 0 0 .1 6.984v5.938a1.682 1.682 0 0 0 1.681 1.681h1.881v4.257c0 .272.221.494.494.494h10.688a.494.494 0 0 0 .494-.494v-4.256h1.88a1.682 1.682 0 0 0 1.682-1.682V6.984a1.681 1.681 0 0 0-1.681-1.681h-1.881ZM1.78 6.291a.693.693 0 0 0-.693.693v5.938a.694.694 0 0 0 .693.694h1.881v-3.069c0-.273.221-.494.494-.494h10.688c.273 0 .494.221.494.494v3.069h1.88a.694.694 0 0 0 .694-.694V6.984a.693.693 0 0 0-.693-.693H1.78Zm12.569 4.75h-9.7v7.325h9.7V11.04ZM2.475 8.172c0-.273.22-.494.494-.494h1.187a.494.494 0 1 1 0 .988H2.97a.494.494 0 0 1-.494-.494Zm3.562 4.75c0-.273.221-.494.494-.494h5.938a.494.494 0 1 1 0 .988H6.53a.494.494 0 0 1-.494-.494Zm0 2.375c0-.273.221-.494.494-.494h4.157a.494.494 0 1 1 0 .988H6.53a.494.494 0 0 1-.494-.494Z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-share" viewBox="0 0 19 18"><path clip-rule="evenodd" d="M14.844 1.73a2.475 2.475 0 1 0 0 4.949 2.475 2.475 0 0 0 0-4.95ZM11.38 4.203a3.463 3.463 0 1 1 .447 1.703L7.531 7.58a3.473 3.473 0 0 1-.087 1.873l4.555 2.278a3.463 3.463 0 1 1-.442.883L7 10.335a3.463 3.463 0 1 1 .171-3.677l4.298-1.671a3.473 3.473 0 0 1-.089-.783Zm1.242 8.407a2.475 2.475 0 1 0 4.441 2.187 2.475 2.475 0 0 0-4.44-2.187ZM4.156 5.886a2.475 2.475 0 1 0 0 4.95 2.475 2.475 0 0 0 0-4.95Z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-bookmark" viewBox="0 0 13 19"><path clip-rule="evenodd" d="M12.05.948c-.293-.32-.7-.494-1.114-.494H2.007c-.421 0-.821.175-1.121.494a1.73 1.73 0 0 0-.457 1.186v15.488c0 .198.05.388.142.563.1.167.236.304.408.395a.89.89 0 0 0 .535.122.956.956 0 0 0 .522-.19l2.464-1.84h.007l1.964-1.459 1.958 1.46h.014l2.464 1.839c.15.114.329.182.522.19a.89.89 0 0 0 .535-.122 1.03 1.03 0 0 0 .4-.395c.1-.175.15-.365.15-.563V2.134c0-.449-.164-.874-.464-1.186ZM3.771 16.011 1.5 17.7s-.029.015-.05.022c-.014 0-.029-.007-.043-.015-.021-.008-.028-.023-.043-.038-.007-.015-.007-.03-.007-.053V2.134a.74.74 0 0 1 .186-.494.639.639 0 0 1 .464-.198h1.764v14.57Zm4.465-.691-1.5-1.125a.462.462 0 0 0-.536 0L4.7 15.32V1.442h3.536V15.32Zm3.35 2.378v-.053s-.015.015-.015.023a.089.089 0 0 1-.035.038c-.015 0-.036.015-.05.015-.015-.007-.036-.007-.05-.023l-2.272-1.687V1.442h1.772c.171 0 .335.069.457.198a.747.747 0 0 1 .193.494v15.564Z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-bookmarked" viewBox="0 0 17 25"><path clip-rule="evenodd" d="M16.27.65C15.86.23 15.29 0 14.71 0H2.21A2.201 2.201 0 0 0 0 2.21v20.38c0 .26.07.51.2.74.14.22.33.4.57.52.23.13.49.18.75.16.26-.01.51-.1.73-.25l3.45-2.42h.01l1.15-.8 1.6-1.12 1.6 1.12 1.14.8h.02l3.45 2.42c.21.15.46.24.73.25.26.02.52-.03.75-.16.23-.12.43-.3.56-.52.14-.23.21-.48.21-.74V2.21c0-.59-.23-1.15-.65-1.56ZM4.68 20.47 1.5 22.69s-.04.02-.07.03c-.02 0-.04-.01-.06-.02-.03-.01-.04-.03-.06-.05V2.21c0-.24.09-.47.26-.65.17-.17.41-.26.65-.26h2.47v19.17h-.01Zm10.94 2.22v-.07s-.02.02-.02.03a.12.12 0 0 1-.05.05c-.02 0-.05.02-.07.02-.02-.01-.05-.01-.07-.03l-3.18-2.22V1.3h2.48a.9.9 0 0 1 .64.26c.17.18.27.41.27.65v20.48Z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-chevron-down" viewBox="0 0 16 16"><path d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z" fill-rule="evenodd"></path></symbol><symbol id="am-symbol-icon-search" viewBox="0 0 24 24"><path d="m23 21.85-6.145-6.146a8.966 8.966 0 1 0-1.151 1.15L21.849 23 23 21.85ZM2.656 9.98a7.324 7.324 0 1 1 7.324 7.324A7.332 7.332 0 0 1 2.656 9.98Z" fill="#015FAC"></path></symbol><symbol id="am-symbol-cacm-logo-small"><path d="M48.75 24c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24Z" fill="#fff"></path><path d="m24.998 9-15 15 15 15 15-15-15-15Z" fill="#027BA3"></path><path d="M34.196 24A9.195 9.195 0 0 1 25 33.196 9.195 9.195 0 0 1 15.804 24 9.195 9.195 0 0 1 25 14.804 9.195 9.195 0 0 1 34.196 24Z" fill="#fff"></path><path d="M33.28 24A8.275 8.275 0 0 1 25 32.275 8.275 8.275 0 0 1 16.72 24c0-4.57 3.705-8.28 8.28-8.28A8.276 8.276 0 0 1 33.28 24Z" fill="#027BA3"></path><path d="M20.18 25.613c-.084.07-.163.133-.23.191a1.641 1.641 0 0 1-.596.292c-.104.025-.25.041-.441.041-.35 0-.642-.116-.875-.354a1.219 1.219 0 0 1-.35-.891c0-.296.058-.534.175-.717.116-.183.287-.325.508-.433.225-.109.492-.184.804-.225.313-.042.646-.075 1.004-.1v-.021c0-.221-.083-.371-.241-.454-.163-.084-.405-.125-.73-.125-.145 0-.316.025-.512.079s-.388.12-.571.204h-.104v-.967c.12-.037.32-.079.596-.125.275-.05.55-.075.829-.075.687 0 1.187.117 1.5.342.312.23.47.575.47 1.046v2.712h-1.241v-.42h.004Zm0-.621v-.825c-.21.02-.38.041-.505.054-.13.017-.258.046-.38.091a.561.561 0 0 0-.253.171.488.488 0 0 0-.088.305c0 .187.05.312.15.383.1.07.246.104.442.104a.802.802 0 0 0 .329-.075c.113-.05.212-.12.304-.208ZM24.154 26.137c-.329 0-.633-.041-.904-.125a1.897 1.897 0 0 1-.712-.383c-.2-.17-.355-.387-.467-.65a2.336 2.336 0 0 1-.167-.925c0-.379.058-.704.183-.97.121-.267.284-.488.492-.659.2-.167.433-.288.7-.367a2.98 2.98 0 0 1 1.504-.046c.221.05.442.134.667.242v1.067h-.158c-.05-.046-.113-.1-.184-.154a1.673 1.673 0 0 0-.237-.159 1.349 1.349 0 0 0-.683-.175c-.317 0-.563.109-.738.33-.175.22-.262.516-.262.891 0 .4.091.696.279.892.187.196.433.296.741.296.155 0 .296-.017.413-.055a1.27 1.27 0 0 0 .517-.28c.058-.049.112-.099.154-.14h.158v1.062l-.246.108a2.925 2.925 0 0 1-.629.175 2.776 2.776 0 0 1-.417.026h-.004ZM30.867 26.033v-1.991c0-.196 0-.363-.013-.496a1.102 1.102 0 0 0-.062-.33.386.386 0 0 0-.167-.187.715.715 0 0 0-.317-.058.665.665 0 0 0-.279.062 1.99 1.99 0 0 0-.304.175v2.83h-1.242v-1.992c0-.192 0-.358-.012-.496a1 1 0 0 0-.067-.333.386.386 0 0 0-.166-.188.707.707 0 0 0-.313-.058c-.1 0-.2.025-.3.07-.096.05-.192.105-.283.167v2.83H26.1v-3.984h1.242v.438c.204-.175.396-.309.575-.405a1.27 1.27 0 0 1 .604-.145c.246 0 .458.058.642.175.183.116.325.287.42.516.238-.22.467-.391.675-.512.213-.121.425-.18.642-.18.183 0 .35.03.496.088.146.058.27.146.37.267.113.129.197.279.25.454.055.175.084.408.084.692v2.596h-1.242l.009-.005Z" fill="#fff"></path></symbol><symbol id="am-symbol-cacm-logo" viewBox="30.79 34.55 548.86 88.05"><path d="M54.75 71.41c-.8.8-1.77 1.2-2.85 1.2H39.52c-1.08 0-2.05-.4-2.85-1.2l-4.68-4.68c-.8-.8-1.2-1.77-1.2-2.85v-20.6c0-1.08.4-2.05 1.2-2.85l4.68-4.68c.8-.8 1.77-1.2 2.85-1.2H51.9c1.08 0 2.05.4 2.85 1.2l4.96 4.96-4.62 4.56-3.88-3.88c-.23-.23-.46-.34-.8-.34H41c-.34 0-.57.11-.8.34l-2.23 2.23c-.23.23-.34.51-.34.8v18.31c0 .29.11.57.34.8l2.23 2.23c.23.23.46.34.8.34h9.41c.34 0 .57-.11.8-.34l3.88-3.88 4.62 4.56-4.96 4.97zm44.5-4.68-4.68 4.68c-.8.8-1.77 1.2-2.85 1.2H76.83c-1.08 0-2.05-.4-2.85-1.2l-4.68-4.68c-.8-.8-1.2-1.77-1.2-2.85v-20.6c0-1.08.4-2.05 1.2-2.85l4.68-4.68c.8-.8 1.77-1.2 2.85-1.2h14.89c1.08 0 2.05.4 2.85 1.2l4.68 4.68c.8.8 1.2 1.77 1.2 2.85v20.6c0 1.08-.4 2.05-1.2 2.85zM93.6 44.42c0-.29-.11-.57-.34-.8l-2.23-2.23c-.23-.23-.46-.34-.8-.34H78.31c-.34 0-.57.11-.8.34l-2.23 2.23c-.23.23-.34.51-.34.8v18.31c0 .29.11.57.34.8l2.23 2.23c.23.23.46.34.8.34h11.92c.34 0 .57-.11.8-.34l2.23-2.23c.23-.23.34-.51.34-.8V44.42zm50.44 28.19V42.37l-9.3 30.24h-7.07l-9.3-30.24v30.24h-6.68V34.55h10.5l9.01 29.5 9.01-29.5h10.5V72.6h-6.67zm52.65 0V42.37l-9.3 30.24h-7.07l-9.3-30.24v30.24h-6.68V34.55h10.5l9.01 29.5 9.01-29.5h10.5V72.6h-6.67zm46.66-5.88-4.68 4.68c-.8.8-1.77 1.2-2.85 1.2h-11.47c-1.08 0-2.05-.4-2.85-1.2l-4.68-4.68c-.8-.8-1.2-1.77-1.2-2.85V34.55h6.85v28.18c0 .29.11.57.34.8l2.23 2.23c.23.23.46.34.8.34h8.5c.34 0 .57-.11.8-.34l2.23-2.23c.23-.23.34-.51.34-.8V34.55h6.85v29.33c-.01 1.08-.41 2.05-1.21 2.85zm32.69 5.88-12.55-29.5v29.5h-6.67V34.55h9.7l12.55 29.5v-29.5h6.67V72.6h-9.7zm20.82 0v-6.05h6.85V40.6h-6.85v-6.05h20.54v6.05h-6.85v25.96h6.85v6.05h-20.54zm53.46-1.2c-.8.8-1.77 1.2-2.85 1.2h-12.38c-1.08 0-2.05-.4-2.85-1.2l-4.68-4.68c-.8-.8-1.2-1.77-1.2-2.85v-20.6c0-1.08.4-2.05 1.2-2.85l4.68-4.68c.8-.8 1.77-1.2 2.85-1.2h12.38c1.08 0 2.05.4 2.85 1.2l4.96 4.96-4.62 4.56-3.88-3.88c-.23-.23-.46-.34-.8-.34h-9.41c-.34 0-.57.11-.8.34l-2.22 2.23c-.23.23-.34.51-.34.8v18.31c0 .29.11.57.34.8l2.22 2.23c.23.23.46.34.8.34h9.41c.34 0 .57-.11.8-.34l3.88-3.88 4.62 4.56-4.96 4.97zm39.47 1.2-3.59-9.53h-15.18l-3.6 9.53h-6.85l14.09-38.05h8.1l13.98 38.05h-6.95zm-11.18-30.7-5.25 15.06h10.5l-5.25-15.06zm35.94-.85v31.55h-6.85V41.06h-11.01v-6.5h28.87v6.5h-11.01zm19.27 31.55v-6.05h6.85V40.6h-6.85v-6.05h20.54v6.05h-6.85v25.96h6.85v6.05h-20.54zm61.89-5.88-4.68 4.68c-.8.8-1.77 1.2-2.85 1.2h-14.89c-1.08 0-2.05-.4-2.85-1.2l-4.68-4.68c-.8-.8-1.2-1.77-1.2-2.85v-20.6c0-1.08.4-2.05 1.2-2.85l4.68-4.68c.8-.8 1.77-1.2 2.85-1.2h14.89c1.08 0 2.05.4 2.85 1.2l4.68 4.68c.8.8 1.2 1.77 1.2 2.85v20.6c0 1.08-.4 2.05-1.2 2.85zm-5.64-22.31c0-.29-.11-.57-.34-.8l-2.22-2.23c-.23-.23-.46-.34-.8-.34h-11.92c-.34 0-.57.11-.8.34l-2.22 2.23c-.23.23-.34.51-.34.8v18.31c0 .29.12.57.34.8l2.22 2.23c.23.23.46.34.8.34h11.92c.34 0 .57-.11.8-.34l2.22-2.23c.23-.23.34-.51.34-.8V44.42zm37.65 28.19-12.55-29.5v29.5h-6.68V34.55h9.7l12.55 29.5v-29.5h6.68V72.6h-9.7zm50.72-5.88-4.68 4.68c-.8.8-1.77 1.2-2.85 1.2h-15.92c-1.08 0-2.05-.4-2.85-1.2l-4.85-4.85 4.56-4.62 3.82 3.82c.23.23.46.34.8.34h12.95c.34 0 .57-.11.8-.34l2.22-2.23c.23-.23.34-.51.34-.8v-3.65c0-.57-.51-1.08-1.08-1.14l-20.48-2.74c-2.23-.29-3.94-2.28-3.94-4.45v-7.47c0-1.08.4-2.05 1.2-2.85l4.68-4.68c.8-.8 1.77-1.2 2.85-1.2h15.92c1.08 0 2.05.4 2.85 1.2l4.85 4.85-4.56 4.62-3.82-3.82c-.23-.23-.46-.34-.8-.34H557.5c-.34 0-.57.11-.8.34l-2.22 2.23c-.23.23-.34.51-.34.8v3.65c0 .57.46 1.08 1.03 1.14l20.54 2.74c2.22.29 3.94 2.28 3.94 4.45v7.47c-.01 1.08-.41 2.05-1.21 2.85zM263.05 90.51l-.88.88c-.15.15-.33.22-.54.22h-2.79a.79.79 0 0 1-.54-.22l-.88-.88a.732.732 0 0 1-.22-.54v-3.86c0-.2.07-.38.22-.54l.88-.88c.15-.15.33-.22.54-.22h2.79c.2 0 .39.07.54.22l.88.88c.15.15.22.33.22.54v3.86c0 .2-.07.39-.22.54zm-1.06-4.19a.22.22 0 0 0-.06-.15l-.42-.42a.204.204 0 0 0-.15-.06h-2.24c-.06 0-.11.02-.15.06l-.42.42a.22.22 0 0 0-.06.15v3.43c0 .05.02.11.06.15l.42.42c.04.04.09.06.15.06h2.24c.06 0 .11-.02.15-.06l.42-.42c.04-.04.06-.1.06-.15v-3.43zm5.41 2.33v2.96h-1.28v-7.13h4.78v1.22h-3.5v1.73h3.5v1.22h-3.5zm12.04-2.96v5.92h-1.28v-5.92h-2.06v-1.22h5.41v1.22h-2.07zm8.45 5.92v-2.96h-2.86v2.96h-1.28v-7.13h1.28v2.95h2.86v-2.95h1.28v7.13h-1.28zm4.43 0v-7.13h4.78v1.22h-3.5v1.73h3.5v1.22h-3.5v1.74h3.5v1.22h-4.78zm30.16 30.99-3.59-9.53h-15.18l-3.59 9.53h-6.85l14.09-38.05h8.1l13.98 38.05h-6.96zM311.3 91.91l-5.25 15.06h10.5l-5.25-15.06zm49.12 29.49c-.8.8-1.77 1.2-2.85 1.2h-12.38c-1.08 0-2.05-.4-2.85-1.2l-4.68-4.68c-.8-.8-1.2-1.77-1.2-2.85v-20.6c0-1.08.4-2.05 1.2-2.85l4.68-4.68c.8-.8 1.77-1.2 2.85-1.2h12.38c1.08 0 2.05.4 2.85 1.2l4.96 4.96-4.62 4.56-3.88-3.88c-.23-.23-.46-.34-.8-.34h-9.41c-.34 0-.57.11-.8.34l-2.22 2.23c-.23.23-.34.51-.34.8v18.31c0 .29.12.57.34.8l2.22 2.23c.23.23.46.34.8.34h9.41c.34 0 .57-.12.8-.34l3.88-3.88 4.62 4.56-4.96 4.97zm47.51 1.2V92.36l-9.3 30.24h-7.07l-9.3-30.24v30.24h-6.68V84.55h10.5l9.01 29.5 9.01-29.5h10.5v38.05h-6.67z"></path></symbol><symbol id="am-symbol-icon-social-facebook"><path d="m22.723 20 .445-2.896h-2.779v-1.879c0-.792.388-1.564 1.633-1.564h1.263v-2.465S22.139 11 21.043 11c-2.289 0-3.784 1.387-3.784 3.898v2.206h-2.544V20h2.544v7h3.13v-7h2.334Z"></path></symbol><symbol id="am-symbol-icon-social-twitter"><path d="M27.613 13.657a7.057 7.057 0 0 1-2.03.557 3.54 3.54 0 0 0 1.555-1.955 7.08 7.08 0 0 1-2.245.857A3.53 3.53 0 0 0 22.313 12c-2.282 0-3.958 2.13-3.442 4.34a10.033 10.033 0 0 1-7.285-3.694 3.54 3.54 0 0 0 1.093 4.72 3.52 3.52 0 0 1-1.6-.442c-.038 1.637 1.135 3.169 2.835 3.51a3.542 3.542 0 0 1-1.596.06 3.538 3.538 0 0 0 3.301 2.454 7.106 7.106 0 0 1-5.232 1.465A10.006 10.006 0 0 0 15.804 26c6.562 0 10.27-5.542 10.046-10.513a7.195 7.195 0 0 0 1.763-1.83Z"></path></symbol><symbol id="am-symbol-icon-social-linkedin"><path d="M14.117 12.74c0 .96-.773 1.738-1.726 1.738a1.732 1.732 0 0 1-1.725-1.739c0-.96.772-1.739 1.725-1.739.953 0 1.726.78 1.726 1.74Zm.013 3.13h-3.478V27h3.479V15.87Zm5.553 0h-3.456V27h3.457v-5.843c0-3.248 4.194-3.514 4.194 0V27h3.47v-7.048c0-5.481-6.207-5.282-7.665-2.583v-1.5Z"></path></symbol><symbol id="am-symbol-icon-social-reddit"><path d="M27.764 21.071v.613c0 3.368-3.879 6.022-8.676 6.022-4.797 0-8.676-2.654-8.676-6.022v-.613c-1.122-.51-1.53-1.735-1.122-2.857.306-.817 1.123-1.327 1.939-1.225.612 0 1.123.204 1.531.612 1.735-1.122 3.776-1.837 5.818-1.837l1.122-5.103c0-.102.102-.204.102-.204.102-.102.205-.102.307-.102l3.572.816c.408-.714 1.327-1.123 2.041-.714.715.408 1.123 1.326.715 2.04-.409.715-1.327 1.124-2.042.715-.51-.204-.816-.714-.816-1.326l-3.164-.715-1.02 4.593c2.245.102 4.286.817 5.715 1.837.816-.816 2.245-.816 3.062 0 .408.408.612.919.612 1.531.306.919-.306 1.633-1.02 1.94Zm-11.942 1.123c.816 0 1.53-.714 1.53-1.53 0-.817-.714-1.532-1.53-1.532-.817 0-1.531.715-1.531 1.531 0 .817.612 1.531 1.53 1.531Zm7.042 1.94c-.204-.205-.408-.205-.51 0-.612.714-2.041.918-3.062.918-1.02 0-2.45-.204-3.062-.919-.204-.204-.408-.204-.51 0-.204.204-.204.409 0 .51 1.02 1.021 3.062 1.123 3.674 1.123.613 0 2.552-.102 3.675-1.122-.102-.102-.102-.306-.205-.51Zm1.225-3.47c0-.817-.714-1.532-1.53-1.532-.817 0-1.532.715-1.532 1.531 0 .817.715 1.531 1.531 1.531.817 0 1.531-.714 1.531-1.53Z"></path></symbol><symbol id="am-symbol-cacm-avatar-blank" viewBox="0 0 40 40"><g> <circle cx="20" cy="20" fill="var(--wp--preset--color--cacm-link-blue)" r="19" stroke="var(--wp--preset--color--cacm-link-blue)" stroke-width="2"></circle> <path clip-rule="evenodd" d="M5 33.23v-.73c0-4.987 9.994-7.5 15-7.5s15 2.513 15 7.5v.73A19.952 19.952 0 0 1 20 40a19.952 19.952 0 0 1-15-6.77ZM20 8.333a7.498 7.498 0 0 0-7.5 7.5c0 4.143 3.356 7.5 7.5 7.5s7.5-3.357 7.5-7.5c0-4.144-3.356-7.5-7.5-7.5Z" fill="var(--wp--preset--color--cacm-gray-200)" fill-rule="evenodd"></path> </g></symbol></svg><div id="page" class="site"> <a class="skip-link" href="#content">Skip to content</a> <div class="site-header-wrapper" data-component="siteHeader"> <header id="masthead" class="site-header site-header--no-js"> <div class="site-header-container"> <button class="site-header-hamburger" aria-label="Main Menu"> <span class="site-header-hamburger-closed"> <svg xmlns="http://www.w3.org/2000/svg" version="1.2" viewBox="0 0 25 25"> <path d="M.2.2h24.6v2.6H.2zm0 11h24.6v2.7H.2zm0 11h24.6v2.6H.2z" style="fill:#1a1a1a"/> </svg> </span> <span class="site-header-hamburger-open"> <svg xmlns="http://www.w3.org/2000/svg" version="1.2" viewBox="0 0 25 25"> <path d="M1.7.9 24 23.8m-23 0L23.3.9" style="fill:none;stroke:#fff;stroke-width:1.3"/> </svg> </span> </button> <a class="site-header-logo" aria-label="Home" href="https://cacm.acm.org"> <svg aria-hidden="true" focusable="false" width="548" height="88" fill="#000"><use href="#am-symbol-cacm-logo"></use></svg> <svg aria-hidden="true" focusable="false" width="548" height="88" fill="#FFF"><use href="#am-symbol-cacm-logo"></use></svg> </a> <div class="site-header-topics-menu"> <button class="site-header-topics-menu-toggle"> Explore Topics <svg xmlns="http://www.w3.org/2000/svg" width="14" height="8" fill="none"> <path stroke="#1A1A1A" stroke-width="1.5" d="m1.5 1.5 5.5 5 5.5-5"/> </svg> </button> <nav role="navigation" aria-label="Topics Menu" class="site-header-topics-menu-expanded" aria-hidden="true"> <ul class="site-header-topics-menu-list"> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/architecture-and-hardware/"> Architecture and Hardware </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/artificial-intelligence-machine-learning/"> Artificial Intelligence and Machine Learning </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/computer-history/"> Computer History </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/computing-applications/"> Computing Applications </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/computing-profession/"> Computing Profession </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/data-and-information/"> Data and Information </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/education/"> Education </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/hci/"> HCI </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/philosophy-of-computing/"> Philosophy of Computing </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/security-and-privacy/"> Security and Privacy </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/society/"> Society </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/software-engineering-and-programming-languages/"> Software Engineering and Programming Languages </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/systems-and-networking/"> Systems and Networking </a> </li> <li class="site-header-topics-menu-list-item"> <a href="https://cacm.acm.org/category/theory/"> Theory </a> </li> </ul> </nav> </div> <div class="site-header-magazine-menu"> <button class="site-header-magazine-menu-toggle"> Latest Issue <svg xmlns="http://www.w3.org/2000/svg" width="14" height="8" fill="none"> <path stroke="#1A1A1A" stroke-width="1.5" d="m1.5 1.5 5.5 5 5.5-5"/> </svg> </button> <nav role="navigation" aria-label="Magazine Menu" class="site-header-magazine-menu-expanded" aria-hidden="true"> <a href="https://cacm.acm.org/issue/december-2024/"> <figure class="site-header-magazine-menu-expanded-image"> <div class="image-wrapper"><img width="1000" height="1338" src="https://cacm.acm.org/wp-content/uploads/2024/11/Dec.2024-Cover-1000x1338-1.jpg?w=1000" class="attachment-original size-original" alt="December 2024 CACM cover" loading="lazy" decoding="async" srcset="https://cacm.acm.org/wp-content/uploads/2024/11/Dec.2024-Cover-1000x1338-1.jpg 1000w, https://cacm.acm.org/wp-content/uploads/2024/11/Dec.2024-Cover-1000x1338-1.jpg?resize=224,300 224w, https://cacm.acm.org/wp-content/uploads/2024/11/Dec.2024-Cover-1000x1338-1.jpg?resize=768,1028 768w, https://cacm.acm.org/wp-content/uploads/2024/11/Dec.2024-Cover-1000x1338-1.jpg?resize=765,1024 765w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></div> </figure> </a> <div class="site-header-magazine-menu-expanded-text"> <div class="site-header-magazine-menu-expanded-current"> <h2 class="site-header-magazine-menu-expanded-heading"> Latest Issue </h2> <a href="https://cacm.acm.org/issue/december-2024/" class="site-header-magazine-menu-expanded-issue"><b>December 2024</b>, Vol. 67 No. 12</a> </div> <div class="site-header-magazine-menu-expanded-previous"> <h2 class="site-header-magazine-menu-expanded-heading"> Previous Issue </h2> <a href="https://cacm.acm.org/issue/november-2024/" class="site-header-magazine-menu-expanded-issue"><b>November 2024</b>, Vol. 67 No. 11</a> </div> <a href="https://cacm.acm.org/issues" class="site-header-magazine-menu-expanded-link"> Explore the archive <svg xmlns="http://www.w3.org/2000/svg" width="12" height="10" fill="none" aria-hidden="true" tabindex="-1"> <path fill="#000" d="m7 0-.715.697 3.79 3.803H0v1h10.075l-3.79 3.787L7 10l5-5-5-5Z"/> </svg> </a> </div> </nav> </div> <a href="https://cacm.acm.org/?s=" aria-label="Search" class="site-header-search"> <span class="site-header-search-text"> Search </span> <svg aria-hidden="true" focusable="false" width="24" height="24" class="site-header-search-icon"><use href="#am-symbol-icon-search"></use></svg></a> <nav class="site-header-membership-nav"> <button class="site-header-membership-nav__button"> <span class="site-header-membership-nav__button-text">Open Membership Navigation</span> <span class="site-header-membership-nav__button-icon"> <svg aria-hidden="true" focusable="false" width="40" height="40" tabindex="-1"><use href="#am-symbol-cacm-avatar-blank"></use></svg> </span> </button> <div class="site-header-membership-nav__menu-container" aria-hidden="true"> <ul class="site-header-membership-nav__menu"> <li class="site-header-membership-nav__menu-item"> <a href="https://cacm.acm.org/account/settings">Settings</a> </li> <li class="site-header-membership-nav__menu-item"> <a href="https://cacm.acm.org/logout/">Sign Out</a> </li> </ul> </div> </nav> <a class="site-header-member-login-link" href="https://cacm.acm.org/wp-login.php?saml_sso">Sign In</a> <a href="https://cacm.acm.org/join-acm" class="site-header-cta-membership"> <div class="site-header-cta-membership-container"> <div class="site-header-cta-membership-text"> Join ACM <svg xmlns="http://www.w3.org/2000/svg" width="12" height="10" fill="none" aria-hidden="true" tabindex="-1"> <path fill="#000" d="m7 0-.715.697 3.79 3.803H0v1h10.075l-3.79 3.787L7 10l5-5-5-5Z"/> </svg> </div> <div class="site-header-cta-membership-logo"> <svg aria-hidden="true" focusable="false" width="48" height="48"><use href="#am-symbol-cacm-logo-small"></use></svg> </div> </div> </a> </div> <nav role="navigation" aria-label="Main Menu" class="site-header-hamburger-menu" aria-hidden="true"> <!-- Search bar --> <form role="search" action="https://cacm.acm.org" method="get" class="site-header-hamburger-menu-search"> <label for="site-navigation-expanded-search"> <span class="site-header-hamburger-menu-search-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="21" height="21" fill="none"> <path fill="#4C4C4C" d="m21 19.902-5.866-5.867a8.558 8.558 0 1 0-1.099 1.099L19.902 21 21 19.902ZM1.581 8.572a6.99 6.99 0 1 1 6.99 6.99 6.999 6.999 0 0 1-6.99-6.99Z"/> </svg> </span> <input type="text" name="s" id="site-navigation-expanded-search" class="site-header-hamburger-menu-search-input" placeholder="Search" value="" /> </label> </form> <!-- Topics menu --> <div class="site-header-hamburger-menu-topics site-header-hamburger-menu-topics--expanded"> <h2 class="site-header-hamburger-menu-heading"> Topics <span class="site-header-hamburger-menu-accordion-icon"> <svg aria-hidden="true" focusable="false" width="16" height="16"><use href="#am-symbol-icon-chevron-down"></use></svg> </span> </h2> <ul class="site-header-hamburger-menu-topics-menu"> <li> <a href="https://cacm.acm.org/category/architecture-and-hardware/"> Architecture and Hardware </a> </li> <li> <a href="https://cacm.acm.org/category/artificial-intelligence-machine-learning/"> Artificial Intelligence and Machine Learning </a> </li> <li> <a href="https://cacm.acm.org/category/computer-history/"> Computer History </a> </li> <li> <a href="https://cacm.acm.org/category/computing-applications/"> Computing Applications </a> </li> <li> <a href="https://cacm.acm.org/category/computing-profession/"> Computing Profession </a> </li> <li> <a href="https://cacm.acm.org/category/data-and-information/"> Data and Information </a> </li> <li> <a href="https://cacm.acm.org/category/education/"> Education </a> </li> <li> <a href="https://cacm.acm.org/category/hci/"> HCI </a> </li> <li> <a href="https://cacm.acm.org/category/philosophy-of-computing/"> Philosophy of Computing </a> </li> <li> <a href="https://cacm.acm.org/category/security-and-privacy/"> Security and Privacy </a> </li> <li> <a href="https://cacm.acm.org/category/society/"> Society </a> </li> <li> <a href="https://cacm.acm.org/category/software-engineering-and-programming-languages/"> Software Engineering and Programming Languages </a> </li> <li> <a href="https://cacm.acm.org/category/systems-and-networking/"> Systems and Networking </a> </li> <li> <a href="https://cacm.acm.org/category/theory/"> Theory </a> </li> </ul> </div> <!-- Sections menu --> <div class="site-header-hamburger-menu-sections"> <h2 class="site-header-hamburger-menu-heading"> Sections <span class="site-header-hamburger-menu-accordion-icon"> <svg aria-hidden="true" focusable="false" width="16" height="16"><use href="#am-symbol-icon-chevron-down"></use></svg> </span> </h2> <ul class="site-header-hamburger-menu-sections-menu"> <li> <a href="https://cacm.acm.org/section/research/"> Research and Advances </a> </li> <li> <a href="https://cacm.acm.org/section/opinion/"> Opinion </a> </li> <li> <a href="https://cacm.acm.org/section/practice/"> Practice </a> </li> <li> <a href="https://cacm.acm.org/section/news/"> News </a> </li> <li> <a href="https://cacm.acm.org/section/careers/"> Careers </a> </li> </ul> </div> <!-- Magazine menu --> <div class="site-header-hamburger-menu-magazine"> <h2 class="site-header-hamburger-menu-heading"> Magazine <span class="site-header-hamburger-menu-accordion-icon"> <svg aria-hidden="true" focusable="false" width="16" height="16"><use href="#am-symbol-icon-chevron-down"></use></svg> </span> </h2> <ul id="menu-magazine-header" class="site-header-hamburger-menu-magazine-menu"><li id="menu-item-217988" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-217988"><a href="/issue/latest/" id="menu-link-1">Latest Issue</a></li> <li id="menu-item-217989" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-217989"><a href="/issues/" id="menu-link-2">Magazine Archive</a></li> <li id="menu-item-224644" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224644"><a href="https://cacm.acm.org/editorial-staff-board/" id="menu-link-3">Editorial Staff and Board</a></li> <li id="menu-item-751386" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-751386"><a href="https://cacm.acm.org/author-guidelines#CACMsubmission" id="menu-link-4">Submit an Article</a></li> <li id="menu-item-224585" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224585"><a href="https://cacm.acm.org/feeds-2/" id="menu-link-5">Alerts & Feeds</a></li> <li id="menu-item-224645" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224645"><a href="https://cacm.acm.org/author-guidelines/" id="menu-link-6">Author Guidelines</a></li> </ul> </div> <div class="site-header-hamburger-menu-membership"> <span class="site-header-hamburger-menu-membership-logo"> <svg aria-hidden="true" focusable="false" width="49" height="48"><use href="#am-symbol-cacm-logo-small"></use></svg> </span> <h2 class="site-header-hamburger-menu-heading site-header-hamburger-menu-membership-heading"> CACM Web Account </h2> <p class="site-header-hamburger-menu-membership-text">Membership in ACM includes a subscription to Communications of the ACM (CACM), the computing industry's most trusted source for staying connected to the world of advanced computing.</p> <div class="site-header-hamburger-menu-membership-buttons"> <a href="https://cacm.acm.org/wp-login.php?saml_sso" class="site-header-hamburger-menu-membership-buttons-log-in"> Sign In </a> <a href="https://accounts.acm.org/" class="site-header-hamburger-menu-membership-buttons-sign-up"> Sign Up </a> </div> </div> <!-- Communications menu --> <div class="site-header-hamburger-menu-communications"> <h2 class="site-header-hamburger-menu-heading"> Communications of the ACM <span class="site-header-hamburger-menu-accordion-icon"> <svg aria-hidden="true" focusable="false" width="16" height="16"><use href="#am-symbol-icon-chevron-down"></use></svg> </span> </h2> <ul id="menu-communications-header" class="site-header-hamburger-menu-communications-menu"><li id="menu-item-224641" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224641"><a href="https://cacm.acm.org/about-us/" id="menu-link-7">About Us</a></li> <li id="menu-item-224663" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224663"><a href="https://cacm.acm.org/faq/" id="menu-link-8">Frequently Asked Questions</a></li> <li id="menu-item-224640" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224640"><a href="https://cacm.acm.org/contact-us/" id="menu-link-9">Contact Us</a></li> </ul> </div> <div class="site-header-hamburger-menu-social"> <h2 class="site-header-hamburger-menu-heading"> Follow Us </h2> <ul class="site-header-hamburger-menu-social-menu"> <li> <a href="https://twitter.com/cacmmag"> <span class="screen-reader-only">CACM on Twitter</span> <svg xmlns="http://www.w3.org/2000/svg" width="38" height="38" fill="none"> <path fill="#1DA1F2" d="M27.613 13.657a7.057 7.057 0 0 1-2.03.557 3.54 3.54 0 0 0 1.555-1.955 7.08 7.08 0 0 1-2.245.857A3.53 3.53 0 0 0 22.313 12c-2.282 0-3.958 2.13-3.442 4.34a10.033 10.033 0 0 1-7.285-3.694 3.54 3.54 0 0 0 1.093 4.72 3.52 3.52 0 0 1-1.6-.442c-.038 1.637 1.135 3.169 2.835 3.51a3.542 3.542 0 0 1-1.596.06 3.538 3.538 0 0 0 3.301 2.454 7.106 7.106 0 0 1-5.232 1.465A10.006 10.006 0 0 0 15.804 26c6.562 0 10.27-5.542 10.046-10.513a7.195 7.195 0 0 0 1.763-1.83Z"/> <path fill="#000" d="M27.613 13.657a7.057 7.057 0 0 1-2.03.557 3.54 3.54 0 0 0 1.555-1.955 7.08 7.08 0 0 1-2.245.857A3.53 3.53 0 0 0 22.313 12c-2.282 0-3.958 2.13-3.442 4.34a10.033 10.033 0 0 1-7.285-3.694 3.54 3.54 0 0 0 1.093 4.72 3.52 3.52 0 0 1-1.6-.442c-.038 1.637 1.135 3.169 2.835 3.51a3.542 3.542 0 0 1-1.596.06 3.538 3.538 0 0 0 3.301 2.454 7.106 7.106 0 0 1-5.232 1.465A10.006 10.006 0 0 0 15.804 26c6.562 0 10.27-5.542 10.046-10.513a7.195 7.195 0 0 0 1.763-1.83Z"/> <rect width="37" height="37" x=".5" y=".5" stroke="#D8D8D8" rx="18.5"/> </svg> </a> </li> <li> <a href="https://www.reddit.com/user/TheOfficialACM"> <span class="screen-reader-only">CACM on Reddit</span> <svg xmlns="http://www.w3.org/2000/svg" width="38" height="38" fill="none"> <path fill="#FF4500" d="M27.764 21.071v.613c0 3.368-3.879 6.022-8.676 6.022-4.797 0-8.676-2.654-8.676-6.022v-.613c-1.122-.51-1.53-1.735-1.122-2.857.306-.817 1.123-1.327 1.939-1.225.612 0 1.123.204 1.531.612 1.735-1.122 3.776-1.837 5.818-1.837l1.122-5.103c0-.102.102-.204.102-.204.102-.102.205-.102.307-.102l3.572.816c.408-.714 1.327-1.123 2.041-.714.715.408 1.123 1.326.715 2.04-.409.715-1.327 1.124-2.042.715-.51-.204-.816-.714-.816-1.326l-3.164-.715-1.02 4.593c2.245.102 4.286.817 5.715 1.837.816-.816 2.245-.816 3.062 0 .408.408.612.919.612 1.531.306.919-.306 1.633-1.02 1.94Zm-11.942 1.123c.816 0 1.53-.714 1.53-1.53 0-.817-.714-1.532-1.53-1.532-.817 0-1.531.715-1.531 1.531 0 .817.612 1.531 1.53 1.531Zm7.042 1.94c-.204-.205-.408-.205-.51 0-.612.714-2.041.918-3.062.918-1.02 0-2.45-.204-3.062-.919-.204-.204-.408-.204-.51 0-.204.204-.204.409 0 .51 1.02 1.021 3.062 1.123 3.674 1.123.613 0 2.552-.102 3.675-1.122-.102-.102-.102-.306-.205-.51Zm1.225-3.47c0-.817-.714-1.532-1.53-1.532-.817 0-1.532.715-1.532 1.531 0 .817.715 1.531 1.531 1.531.817 0 1.531-.714 1.531-1.53Z"/> <path fill="#000" d="M27.764 21.071v.613c0 3.368-3.879 6.022-8.676 6.022-4.797 0-8.676-2.654-8.676-6.022v-.613c-1.122-.51-1.53-1.735-1.122-2.857.306-.817 1.123-1.327 1.939-1.225.612 0 1.123.204 1.531.612 1.735-1.122 3.776-1.837 5.818-1.837l1.122-5.103c0-.102.102-.204.102-.204.102-.102.205-.102.307-.102l3.572.816c.408-.714 1.327-1.123 2.041-.714.715.408 1.123 1.326.715 2.04-.409.715-1.327 1.124-2.042.715-.51-.204-.816-.714-.816-1.326l-3.164-.715-1.02 4.593c2.245.102 4.286.817 5.715 1.837.816-.816 2.245-.816 3.062 0 .408.408.612.919.612 1.531.306.919-.306 1.633-1.02 1.94Zm-11.942 1.123c.816 0 1.53-.714 1.53-1.53 0-.817-.714-1.532-1.53-1.532-.817 0-1.531.715-1.531 1.531 0 .817.612 1.531 1.53 1.531Zm7.042 1.94c-.204-.205-.408-.205-.51 0-.612.714-2.041.918-3.062.918-1.02 0-2.45-.204-3.062-.919-.204-.204-.408-.204-.51 0-.204.204-.204.409 0 .51 1.02 1.021 3.062 1.123 3.674 1.123.613 0 2.552-.102 3.675-1.122-.102-.102-.102-.306-.205-.51Zm1.225-3.47c0-.817-.714-1.532-1.53-1.532-.817 0-1.532.715-1.532 1.531 0 .817.715 1.531 1.531 1.531.817 0 1.531-.714 1.531-1.53Z"/> <rect width="37" height="37" x=".5" y=".5" stroke="#D8D8D8" rx="18.5"/> </svg> </a> </li> <li> <a href="https://www.linkedin.com/groups/36836/"> <span class="screen-reader-only">CACM on LinkedIn</span> <svg xmlns="http://www.w3.org/2000/svg" width="38" height="38" fill="none"> <path fill="#000" d="M14.117 12.74c0 .96-.773 1.738-1.726 1.738a1.732 1.732 0 0 1-1.725-1.739c0-.96.772-1.739 1.725-1.739.953 0 1.726.78 1.726 1.74Zm.013 3.13h-3.478V27h3.479V15.87Zm5.553 0h-3.456V27h3.457v-5.843c0-3.248 4.194-3.514 4.194 0V27h3.47v-7.048c0-5.481-6.207-5.282-7.665-2.583v-1.5Z"/> <rect width="37" height="37" x=".5" y=".5" stroke="#D8D8D8" rx="18.5"/> </svg> </a> </li> </ul> </div> </nav> </header> </div> <div id="content" class="site-content container"> <div id="primary" class="content-area"> <main id="main" class="site-main"> <article id="post-117548" class="post-117548 digital-library type-digital-library status-publish has-post-thumbnail hentry category-architecture-and-hardware category-artificial-intelligence-machine-learning category-systems-and-networking issue-may-2021 section-research content-type-has-video"> <header class="article-header article-header--dark"> <div class="article-header__inner container"> <div class="article-header__section"><a href="https://cacm.acm.org/section/research/">Research and Advances</a></div> <div class="article-header__topic-and-issue-section"> <span class="article-header__topic"> <a href="https://cacm.acm.org/category/architecture-and-hardware/">Architecture and Hardware</a> </span> <span class="article-header__issue-section"> Contributed articles </span> </div> <h1 class="article-header__title">What Serverless Computing Is and Should Become: The Next Phase of Cloud Computing</h1> <div class="article-header__subtitle">The evolution that serverless computing represents, the economic forces that shape it, why it could fail, and how it might fulfill its potential.</div> <div class="article-header__meta"> <div class="article-header__byline"> By <a href="https://cacm.acm.org/author/johann-schleier-smith/" title="Posts by Johann Schleier-Smith" class="author url fn" rel="author">Johann Schleier-Smith</a>, <a href="https://cacm.acm.org/author/vikram-sreekanti/" title="Posts by Vikram Sreekanti" class="author url fn" rel="author">Vikram Sreekanti</a>, <a href="https://cacm.acm.org/author/anurag-khandelwal/" title="Posts by Anurag Khandelwal" class="author url fn" rel="author">Anurag Khandelwal</a>, <a href="https://cacm.acm.org/author/joao-carreira/" title="Posts by Joao Carreira" class="author url fn" rel="author">Joao Carreira</a>, <a href="https://cacm.acm.org/author/neeraja-j-yadwadkar/" title="Posts by Neeraja J. Yadwadkar" class="author url fn" rel="author">Neeraja J. Yadwadkar</a>, <a href="https://cacm.acm.org/author/raluca-ada-popa/" title="Posts by Raluca Ada Popa" class="author url fn" rel="author">Raluca Ada Popa</a>, <a href="https://cacm.acm.org/author/joseph-e-gonzalez/" title="Posts by Joseph E. Gonzalez" class="author url fn" rel="author">Joseph E. Gonzalez</a>, <a href="https://cacm.acm.org/author/ion-stoica/" title="Posts by Ion Stoica" class="author url fn" rel="author">Ion Stoica</a>, and <a href="https://cacm.acm.org/author/david-a-patterson/" title="Posts by David A. Patterson" class="author url fn" rel="author">David A. Patterson</a> </div> <div class="article-header__posted-on"> <span class="posted-on">Posted <time datetime="2021-05-01T00:00:00-04:00">May 1 2021</time></span> </div> </div> <figure class="article-header__figure"> <!-- Alternative image when Cookiebot blocks cookies for marketing purposes. --> <div class="cookieconsent-optout-statistics optout-placeholder"> <div class="image-wrapper image-wrapper--widescreen"><img width="250" height="250" src="https://cacm.acm.org/wp-content/uploads/2021/05/041621_CACMpg77_The-Next-Phase1.jpg" class="attachment-full size-full" alt="white clouds reflected in solar panels" loading="eager" decoding="async" srcset="https://cacm.acm.org/wp-content/uploads/2021/05/041621_CACMpg77_The-Next-Phase1.jpg 250w, https://cacm.acm.org/wp-content/uploads/2021/05/041621_CACMpg77_The-Next-Phase1.jpg?resize=150,150 150w" sizes="(max-width: 250px) 100vw, 250px" /></div> </div> <div class="video-wrapper cookieconsent-optin-statistics cookie-marketing-accepted" data-cookieconsent="marketing"> <iframe title="vimeo-player" src="https://player.vimeo.com/video/540752656" width="640" height="360" frameborder="0" allowfullscreen></iframe> </div> </figure> <div class="article-header__share"> <ul class="share"> <li class="share-link" data-component="share"> <a href="#" class="share-toggle"> <svg aria-hidden="true" focusable="false" width="19" height="18" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-share"></use></svg> <span class="share-link-text"> Share </span> </a> <ul class="share-menu" aria-hidden="true"> <li> <a href="https://twitter.com/intent/tweet?url=https://cacm.acm.org/research/what-serverless-computing-is-and-should-become/&text=What%20Serverless%20Computing%20Is%20and%20Should%20Become:%20The%20Next%20Phase%20of%20Cloud%20Computing" target="_blank"> Twitter </a> </li> <li> <a href="http://www.reddit.com/submit?url=https://cacm.acm.org/research/what-serverless-computing-is-and-should-become/&title=What%20Serverless%20Computing%20Is%20and%20Should%20Become:%20The%20Next%20Phase%20of%20Cloud%20Computing" target="_blank"> Reddit </a> </li> <li> <a href="https://news.ycombinator.com/submitlink?u=https://cacm.acm.org/research/what-serverless-computing-is-and-should-become/&t=What%20Serverless%20Computing%20Is%20and%20Should%20Become:%20The%20Next%20Phase%20of%20Cloud%20Computing" target="_blank"> Hacker News </a> </li> </ul> </li> <li class="share-link share-link-pdf"> <a href="https://dl.acm.org/doi/pdf/10.1145/3406011" target="_blank"> <svg aria-hidden="true" focusable="false" width="19" height="20" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-pdf-download"></use></svg> <span class="share-link-text"> Download PDF </span> </a> </li> <li class="share-link share-link-print" data-component="print"> <a href="#" class="print"> <svg aria-hidden="true" focusable="false" width="19" height="20" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-print"></use></svg> <span class="share-link-text"> Print </span> </a> </li> <li class="share-link share-link-discussion" data-component="share"> <a class="share-link-comments" href="#comments"> <svg aria-hidden="true" focusable="false" width="19" height="20" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-comment"></use></svg> <span class="share-link-text">Join the Discussion</span> </a> </li> <li class="share-link share-link-dl"> <a href="https://dl.acm.org/doi/10.1145/3406011"> <svg aria-hidden="true" focusable="false" width="21" height="21" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-digital-library"></use></svg> <span class="share-link-text"> View in the ACM Digital Library </span> <svg aria-hidden="true" focusable="false" width="14" height="9" fill="var(--cacm--symbol--fill)" class="icon-dl"><use href="#am-symbol-icon-arrow-right"></use></svg> </a> </li> </ul> </div> </div> </header> <section class="article-table-of-contents" data-component="articleToc"> <ol class="article-table-of-contents__list"> <li><a href="#body-1">Introduction</a></li> <li><a href="#body-2">Key Insights</a></li> <li><a href="#body-3">Understanding What Serverless Is Today</a></li> <li><a href="#body-4">Serverless Cloud Economics</a></li> <li><a href="#body-5">The Next Phase of Cloud Computing</a></li> <li><a href="#body-6">Research Challenges</a></li> <li><a href="#body-7">Why Serverless Computing Might Still Fail</a></li> <li><a href="#body-8">Conclusion and Predictions</a></li> <li><a href="#references">References</a></li> <li><a href="#authorinfo">Authors</a></li> <li><a href="#footnotes">Footnotes</a></li> <li><a href="#sidebar-1">Sidebar: The Cost of Serverless</a></li> <li><a href="#sidebar-2">Sidebar: Serverless and Security</a></li> </ol> </section> <div class="article-contents"> <div class="article-content entry-content"> <figure class="article-content__featured-image article-content__featured-image--inline"> <img width="250" height="250" src="https://cacm.acm.org/wp-content/uploads/2021/05/041621_CACMpg77_The-Next-Phase1.jpg?w=250" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="white clouds reflected in solar panels" decoding="async" srcset="https://cacm.acm.org/wp-content/uploads/2021/05/041621_CACMpg77_The-Next-Phase1.jpg 250w, https://cacm.acm.org/wp-content/uploads/2021/05/041621_CACMpg77_The-Next-Phase1.jpg?resize=150,150 150w" sizes="(max-width: 250px) 100vw, 250px" /> </figure> <!-- BEGIN BODY-1 --> <p><a name="body-1"></a></p> <p>In 2010, some of us co-authored a <em>Communications</em> article that helped explain the relatively new phenomenon of cloud computing.<sup><a href="#R4">4</a></sup> We said that cloud computing provided the illusion of infinitely scalable remote servers without charging a premium for scale, as renting 1,000 servers for one hour costs the same as renting one server for 1,000 hours, and that economies of scale for the cloud provider allowed it to be surprisingly inexpensive. We listed challenges to cloud computing, and then predicted that most would be overcome so the industry would increasingly shift from computing inside local data centers to “the cloud,” which has indeed happened. Today two-thirds of enterprise information technology spending for infrastructure and software is based in the cloud.<sup><a href="#R8">8</a></sup></p> <!-- END BODY-1 --> <p><a href="#">Back to Top</a></p> <!-- BEGIN BODY-2 --> <p><a name="body-2"></a></p> <div class="article-key-insights"><h3>Key Insights</h3><ul><li>The cloud originally revolutionized system administration. This second phase of cloud computing simplifies cloud programming.</li><li>Serverless computing encompasses much more than cloud functions, or Function-as-a-Service. Other cloud programming abstractions, such as object storage, also hide the complexity of servers, and more are on the way.</li><li>Serverless today works well in limited applications, so cloud providers will create new application-specific and general-purpose serverless products to enable more use cases.</li><li>This next phase of cloud computing will change the way programmers work as dramatically as the first phase changed how operators work.</li></ul></div> <p>We are revisiting cloud computing a decade later to explain its emerging second phase, which we believe will further accelerate the shift to the cloud. The first phase mainly simplified system administration by making it easier to configure and manage computing infrastructure, primarily through the use of virtual servers and networks carved out from massive multi-tenant data centers. This second phase hides the servers by providing programming abstractions for application builders that simplify cloud development, making cloud software easier to write. Stated briefly, the target of the first phase was system administrators and the second is programmers. This change requires cloud providers to take over many of the operational responsibilities needed to run applications well. <!-- END_PAGE_1 --></p> <p>To emphasize the change of focus from servers to applications, this new phase has become known as <em>serverless computing</em>, although remote servers are still the invisible bedrock that powers it. In this article, we call the traditional first phase <em>serverful computing.</em></p> <p><a href="https://dl.acm.org/cms/attachment/d7c7af17-b8eb-4da0-b976-e2f1778cd8f3/f1.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1021,height=842'); return false;">Figure 1</a> shows an analogy. To attend a remote conference, you either rent a car or hail a taxicab to get from the airport to your hotel. Car rental is like serverful computing, where you must wait in line, sign a contract, reserve the car for your whole stay no matter how much you use it, drive the car yourself, navigate to the hotel, pay for parking, and fill it with fuel before returning it. The taxi is like serverless computing, where you simply need to give the hotel name and pay for the ride; the taxi service provides a trained driver who navigates, charges for the ride, and fills the gas tank. Taxis simplify transportation, as you don’t need to know how to operate a car to get to the hotel. Moreover, taxis get higher utilization than rental cars, which lowers costs for the taxi company. Depending on the length of the conference, the cost of car rental, the cost of parking, the cost of gas, and so on, taxis are not only easier, they might even be cheaper.</p> <p><a href="https://dl.acm.org/cms/attachment/d7c7af17-b8eb-4da0-b976-e2f1778cd8f3/f1.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1021,height=842'); return false;"> <a data-fslightbox="https://dl.acm.org/cms/attachment/d7c7af17-b8eb-4da0-b976-e2f1778cd8f3/f1.jpg" data-type="image" data-caption="" href="https://dl.acm.org/cms/attachment/d7c7af17-b8eb-4da0-b976-e2f1778cd8f3/f1.jpg"> <img decoding="async" alt="f1.jpg" height="342" src="https://dl.acm.org/cms/attachment/d7c7af17-b8eb-4da0-b976-e2f1778cd8f3/f1.jpg" width="415"> </a> </a><br> <strong>Figure 1. Cloud computing approaches compared to rides from an airport: Serverful as renting a car and serverless as taking a taxi ride.</strong></p> <p>In serverless computing, programmers create applications using high-level abstractions offered by the cloud provider. For example, they can define <em>cloud functions</em><sup><a href="#FNA">a</a></sup> using functional-style “stateless” programming in the language of their choice, often JavaScript or Python, then specify how the functions should run, whether in response to Web requests or to triggering events. They may also use serverless object storage, message queues, key-value store databases, mobile client data sync, and so on, a group of services offerings known collectively as <em>Backend-as-a-Service</em> (BaaS). Managed cloud function services are also called <em>Function-as-a-Service</em> (FaaS) and collectively Serverless Cloud Computing today = FaaS + BaaS (see <a href="https://dl.acm.org/cms/attachment/fa909c8b-8631-4a14-9541-3420d63ae3cb/f2.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1021,height=701'); return false;">Figure 2</a>).</p> <p><a href="https://dl.acm.org/cms/attachment/fa909c8b-8631-4a14-9541-3420d63ae3cb/f2.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1021,height=701'); return false;"> <a data-fslightbox="https://dl.acm.org/cms/attachment/fa909c8b-8631-4a14-9541-3420d63ae3cb/f2.jpg" data-type="image" data-caption="" href="https://dl.acm.org/cms/attachment/fa909c8b-8631-4a14-9541-3420d63ae3cb/f2.jpg"> <img decoding="async" alt="f2.jpg" height="285" src="https://dl.acm.org/cms/attachment/fa909c8b-8631-4a14-9541-3420d63ae3cb/f2.jpg" width="415"> </a> </a><br> <strong>Figure 2. Serverless vs. Serverful cloud computing: serverless provides an abstraction between applications and the underlying servers.</strong></p> <p>The main innovation of serverless is hiding servers, which have an inherently complex programming and operating model. Server users must create redundancy for reliability, adjust capacity in response to changes in load, upgrade systems for security, and so on.<sup><a href="#R17">17</a></sup> This often requires difficult reasoning about failure modes and performance in distributed systems. Tools can help, for example, by adjusting capacity heuristically, a form of <em>autoscaling</em>, but these too require detailed configuration and ongoing monitoring. By contrast, serverless hands these and other responsibilities to the cloud provider.</p> <p>Three essential qualities of serverless computing are:</p> <ol> <li>Providing an abstraction that hides the servers and the complexity of programming and operating them.</li> <li>Offering a pay-as-you-go cost model instead of a reservation-based model, so there is no charge for idle resources (see <a href="https://dl.acm.org/cms/attachment/cfc36b35-a1c9-4d81-9a53-a1d56c0a4c9d/f3.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1022,height=678'); return false;">Figure 3</a>).</li> <li>Automatic, rapid, and unlimited scaling resources up and down to match demand closely, from zero to practically infinite.</li> </ol> <p><a href="https://dl.acm.org/cms/attachment/cfc36b35-a1c9-4d81-9a53-a1d56c0a4c9d/f3.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1022,height=678'); return false;"> <a data-fslightbox="https://dl.acm.org/cms/attachment/cfc36b35-a1c9-4d81-9a53-a1d56c0a4c9d/f3.jpg" data-type="image" data-caption="" href="https://dl.acm.org/cms/attachment/cfc36b35-a1c9-4d81-9a53-a1d56c0a4c9d/f3.jpg"> <img loading="lazy" decoding="async" alt="f3.jpg" height="275" src="https://dl.acm.org/cms/attachment/cfc36b35-a1c9-4d81-9a53-a1d56c0a4c9d/f3.jpg" width="415"> </a> </a><br> <strong>Figure 3. Serverless vs Serverful cloud computing: serverless users pay only for resources consumed, not for idle reserved capacity.</strong></p> <p>The cloud-based synthesis of <em>all</em> of these properties is substantially more transformative than previous environments that came close to providing them.<sup><a href="#R8">8</a>,<a href="#R17">17</a></sup> Returning to our analogy, a taxi service (serverless computing) must provide a cab with a licensed driver (hide operation), charge only when giving a ride (pay as you go), and schedule enough cabs to minimize customer wait time (autoscaling). If taxis don’t reliably provide all three, then customers may instead rent and operate cars (serverful computing).</p> <p>A recent <em>Communications</em> article gave an excellent introduction to the current state of serverless computing, how it differs from Infrastructure-as-a-Service (IaaS) and Platform-as-a-Service (PaaS), its market share, example use cases, and its limitations.<sup><a href="#R8">8</a></sup> In this article, we share our views on the evolution that serverless computing represents, the economic forces that shape it, why it could fail, and how it might evolve to fulfill its potential.</p> <p>We project that the majority of data center computing will be dominated by serverless computing but we also believe that serverless computing will depart substantially from the serverless offerings of today. In particular, we believe that new general-purpose serverless abstractions will emerge, adding sophisticated state management and automatic optimization to enable many more use cases. Serverless now depends upon homogeneous CPUs, but in the future serverless will simplify use of hardware accelerators such as Graphical Processing Units (GPUs) or Tensor Processing Units (TPUs)<sup><a href="#R19">19</a></sup> that support specific workloads鈥攖hey offer the most likely path to higher performance as Moore’s Law slows.<sup><a href="#R14">14</a></sup> While there are concerns today about serverless security, we believe that a careful design could in fact make it <em>easier</em> for application developers to secure their software against external attackers.</p> <p>As in 2010, we once again predict that these challenges will be overcome and this second phase will become the dominant form of cloud computing, accelerating its popularity by putting the power of the cloud in the hands of <em>all</em> application developers.</p> <!-- END BODY-2 --> <p><a href="#">Back to Top</a></p> <!-- BEGIN BODY-3 --> <p><a name="body-3"></a></p> <h3>Understanding What Serverless Is Today</h3> <p>Cloud functions<sup><a href="#R8">8</a></sup> capture much of the mindshare in serverless computing, but they are one of many services in the serverless cloud. The excitement around FaaS is well justified because it offers a glimpse of what general-purpose serverless computing might look like, yet BaaS services comprise a much larger, and older, set of serverless services.</p> <p>For example, AWS initially offered their S3 object storage as a remote backup and archival service, years before announcing EC2 virtual machine rental. You can think of S3 as a precursor to serverless computing that offered “diskless storage,” that is, providing storage but hiding the disks. Over time, cloud providers offered additional BaaS services to help serverful computing. Message queues (for example, AWS SQS, Google Cloud Pub/Sub) were another early service. Later came key-value databases (for example, Google Cloud Datastore, AWS DynamoDB, Azure CosmosDB) and SQL-based big data query engines (for example, AWS Athena, Google BigQuery).</p> <p>When AWS Lambda launched in 2015 it was the first cloud functions product and offered something unique and compelling: the ability to execute nearly any code that runs on a server. It included support for several programming languages and for arbitrary libraries, all on a pay-as-you-go basis, operating securely and at any scale. However, it imposed certain limitations on the programming model that even today restrict it to certain applications. These include a maximum execution time, the lack of persistent state, and restricted networking.<sup><a href="#R13">13</a></sup></p> <p>Today, several serverless environments can run arbitrary code, each catering to a particular use case. For example, Google Cloud Dataflow and AWS Glue allow programmers to execute arbitrary code as a stage in a data processing pipeline, while Google App Engine can be thought of as a serverless environment for building Web applications.</p> <p>These many serverless offerings have in common the three essential qualities of serverless computing: an abstraction that hides the servers, a pay-as-you-go cost model, and excellent autoscaling. Taken together they offer a set of alternatives that may be combined to meet an ever-growing range of applications.</p> <!-- END BODY-3 --> <p><a href="#">Back to Top</a></p> <!-- BEGIN BODY-4 --> <p><a name="body-4"></a></p> <h3>Serverless Cloud Economics</h3> <p>Today’s cloud has been shaped as much by business considerations as by technical progress, and its future will be as well. Cloud customers choose serverless computing because it allows them to stay focused on solving problems that are unique to their domain or business, rather than on problems in server administration or distributed systems.<sup><a href="#R6">6</a></sup> The strength of this customer value proposition is a primary cause for optimism about the future adoption of serverless computing.</p> <p>While serverless computing may appear more expensive since the unit prices of resources are higher (see sidebar <a href="#sidebar-1">“The Cost of Serverless”</a>), customers only pay for resources that they are using, while the cloud provider bears the cost of idle resources. In practice, customers realize substantial cost savings when porting applications to serverless.<sup><a href="#R30">30</a></sup> While this cost reduction could threaten cloud provider revenues, the Jevons Paradox<sup><a href="#R2">2</a></sup> suggests that low prices can spark consumption growth that more than offsets the reduction in unit costs, leading to revenue growth. Cloud providers also gain a profit opportunity by helping customers meet variable and unpredictable resource needs, something they can do more efficiently from a shared resource pool than customers can do using their own dedicated resources.<sup><a href="#R16">16</a></sup> This opportunity also exists in serverful computing but grows as resources are shared on a more fine-grained basis. Serverless computing also offers cloud providers opportunities to improve their margins because BaaS products often represent product categories traditionally served by high-margin software products such as databases.</p> <p>The serverless pay-as-you-go model has an important positive implication for the cloud providers’ incentive to innovate. Before serverless, autoscaling cloud services would automatically provision VMs, that is, reserve resources, but the customer would then pay for this capacity even if it remained idle. With serverless, the cloud provider pays for idle resources, which creates “skin in the game” on autoscaling, and provides incentives to ensure efficient resource allocation. Similarly, as the cloud provider assumes direct control over more of the application stack, including the operating system and language runtime, the serverless model encourages investments in efficiency at every level.</p> <p>More productive programmers, lower costs for customers, greater profits for providers, and improved innovation all create favorable conditions for serverless adoption. However, some cloud customers have raised concerns about vendor lock-in, fearing reduced bargaining power when negotiating prices with cloud providers.<sup><a href="#R16">16</a></sup> The serverful VM abstraction is standardized鈥攎ostly on account of the Linux operating system and the x86 instruction set鈥攂ut each provider’s serverless cloud functions and BaaS APIs differ in both readily apparent and subtle ways. The resulting switching costs benefit the largest and most established cloud providers, and give them an incentive to promote complex proprietary APIs that are resistant to de facto standardization. Simple and standardized abstractions, perhaps introduced by smaller cloud providers, open source communities, or academics, would remove the most prominent remaining economic hurdle to serverless adoption.</p> <!-- END BODY-4 --> <p><a href="#">Back to Top</a></p> <!-- BEGIN BODY-5 --> <p><a name="body-5"></a></p> <h3>The Next Phase of Cloud Computing</h3> <p>Perhaps the best way to understand the shift that serverless computing represents is to focus on the first of the essential qualities (as noted previously): providing an abstraction that hides servers and thus simplifies the programming and operating model. From the outset, cloud computing provided a simplified operating model, but simplified programming comes from hiding servers. The future evolution of serverless computing, and in our view of cloud computing, will be guided by efforts to provide abstractions that simplify cloud programming.</p> <p>It is striking how little cloud computing has changed how programmers work to date, especially when compared to the impact it has had on operators. Much of the software that runs in the cloud is the exact same software that runs in a traditional data center. Compare the programming skills most in demand today against those needed 10 years ago and you will notice that the core skill set has changed very little, even as specific technologies come and go. By contrast, the operator’s job has changed tremendously. Installing and maintaining servers, storage, and networks are largely things of the past, replaced by a focus on managing virtualized infrastructure through cloud provider APIs, and by the DevOps movement, which emphasizes the technical and organizational aspects of change management.</p> <p>What makes programming the cloud hard? While it is possible to use the cloud with just one server, this offers neither fault tolerance nor scalability nor pay-as-you-go, so most cloud programming quickly becomes distributed systems programming. When writing distributed systems, programmers must reason about the data center’s spatial extent, its various partial failure modes, and all of its security threats. In the language of Fred P. Brooks, these concerns represent “accidental complexity,” which arises from the implementation environment and stands in contrast to “essential complexity,” which is inherent in the functionality that the application provides.<sup><a href="#R7">7</a></sup> At the time of Brooks’s writing, high-level languages were displacing assembly language, freeing programmers from reasoning about complex machine details such as register allocation or data layout in memory. Just as high-level languages hide many details of how a CPU operates, serverless computing hides many details of what it takes to build a reliable, scalable, and secure distributed system.</p> <p>We next consider alternative approaches to serverless abstraction, including ones that exist today and ones that we imagine. These vie to answer the question, “if not servers, then what?” We group these alternative abstraction approaches into <em>application-specific</em> and <em>general-purpose</em> categories (see <a href="https://dl.acm.org/cms/attachment/b75ab77b-17fa-4047-9f37-e2a26edf4ab9/t1.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1021,height=351'); return false;">Table 1</a>). Application-specific abstractions solve a particular use case, and several of them exist in products today. General-purpose abstractions must work well in a broad variety of uses and remain a research challenge.</p> <p><a href="https://dl.acm.org/cms/attachment/b75ab77b-17fa-4047-9f37-e2a26edf4ab9/t1.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1021,height=351'); return false;"> <a data-fslightbox="https://dl.acm.org/cms/attachment/b75ab77b-17fa-4047-9f37-e2a26edf4ab9/t1.jpg" data-type="image" data-caption="" href="https://dl.acm.org/cms/attachment/b75ab77b-17fa-4047-9f37-e2a26edf4ab9/t1.jpg"> <img loading="lazy" decoding="async" alt="t1.jpg" height="143" src="https://dl.acm.org/cms/attachment/b75ab77b-17fa-4047-9f37-e2a26edf4ab9/t1.jpg" width="415"> </a> </a><br> <strong>Table 1. Alternative abstraction approaches.</strong></p> <p>Let us examine an illustrative example from big data processing. Consider a simple query that might arise in an ecommerce setting: computing an average over 10 billion records using weights derived from one million categories. This workload has the potential for a lot of parallelism, so it benefits from the serverless illusion of infinite resources.</p> <p>We present two application-specific serverless offerings that cater to this example and illustrate how the category affords multiple approaches. One could use the AWS Athena big data query engine, a tool programmed using SQL (Structured Query Language), to execute queries against data in object storage. SQL is particularly well suited to analytics and can express this computation with a single statement. Alternatively, one could use a framework such as that which Google Cloud Dataflow provides. Doing so requires writing a simple MapReduce-style<sup><a href="#R11">11</a></sup> program, for example, using Java or Python, with two functions: one that computes a weighted average for some chunk of data, and another that combines weighted averages for separate chunks into one for their union. The framework takes care of piping data in and out of these functions, as well as autoscaling, reliability, and other distributed systems concerns. In contrast to the SQL-based tool, this abstraction can run arbitrary code, which can make it suitable to a wider range of analytics problems.</p> <p>General-purpose serverless abstractions that offer a performant solution to our big data example do not yet exist. Cloud functions might appear to provide a solution since they allow users to write arbitrary code, and for some workloads they do,<sup><a href="#R28">28</a></sup> but due to limitations they sometimes perform much worse than alternatives.<sup><a href="#R13">13</a>,<a href="#R17">17</a></sup> <a href="https://dl.acm.org/cms/attachment/250c339b-520a-448a-b302-bc127f4c8339/f4.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1022,height=879'); return false;">Figure 4</a> illustrates how network traffic could be much higher if we implement our example using cloud functions, rather than using an application-specific framework such as Cloud Dataflow. With cloud functions, the provider distributes work across various VM instances without regard to the application’s communication patterns, which simplifies autoscaling but increases network traffic.</p> <p><a href="https://dl.acm.org/cms/attachment/250c339b-520a-448a-b302-bc127f4c8339/f4.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1022,height=879'); return false;"> <a data-fslightbox="https://dl.acm.org/cms/attachment/250c339b-520a-448a-b302-bc127f4c8339/f4.jpg" data-type="image" data-caption="" href="https://dl.acm.org/cms/attachment/250c339b-520a-448a-b302-bc127f4c8339/f4.jpg"> <img loading="lazy" decoding="async" alt="f4.jpg" height="357" src="https://dl.acm.org/cms/attachment/250c339b-520a-448a-b302-bc127f4c8339/f4.jpg" width="415"> </a> </a><br> <strong>Figure 4. Increased communication for aggregation and broadcast patterns.</strong></p> <p>We suggest two paths to enhancing cloud functions so that they work well in a broader range of applications, potentially turning them into general-purpose serverless abstractions. First, we imagine that hints provided by the programmer might indicate how to achieve better performance. Hints might describe application communication patterns (for example, broadcast or all-reduce), or suggest task placement affinity.<sup><a href="#R25">25</a></sup> Such an approach has precedent in compilers (for example, branch prediction, alignment, and prefetching hints).</p> <p>Second, and more compellingly, we envision inefficiencies being removed by automatic optimization. In our example the cloud provider might promise to infer locality optimizations from observed communication patterns. In some cases, such inferences might also be made statically, based on an analysis of the program. In the single-machine context this has ample precedent in what modern compilers and language runtimes do, and one might think of this form of serverless computing as extending language support to distributed systems.</p> <p><a href="https://dl.acm.org/cms/attachment/2ad35101-825b-46e9-bfa5-9ce6665f7451/f5.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1022,height=528'); return false;">Figure 5</a> illustrates the difference between application-specific and general-purpose serverless abstractions. In the general-purpose case the cloud provider exposes a few basic building blocks, for example, an enhanced version of cloud functions and serverless storage of some sort. A variety of application-specific use cases can be built on top of these foundations. With application-specific serverless, cloud providers instead offer a proliferation of BaaS to meet the needs of an ever-greater number of applications.</p> <p><a href="https://dl.acm.org/cms/attachment/2ad35101-825b-46e9-bfa5-9ce6665f7451/f5.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1022,height=528'); return false;"> <a data-fslightbox="https://dl.acm.org/cms/attachment/2ad35101-825b-46e9-bfa5-9ce6665f7451/f5.jpg" data-type="image" data-caption="" href="https://dl.acm.org/cms/attachment/2ad35101-825b-46e9-bfa5-9ce6665f7451/f5.jpg"> <img loading="lazy" decoding="async" alt="f5.jpg" height="214" src="https://dl.acm.org/cms/attachment/2ad35101-825b-46e9-bfa5-9ce6665f7451/f5.jpg" width="415"> </a> </a><br> <strong>Figure 5. Potential future directions for serverless.</strong></p> <p>Today, serverless computing remains entirely of the application-specific variety. Even cloud functions, which can execute arbitrary code, are popular mainly for stateless API serving and event-driven data processing.<sup><a href="#R27">27</a></sup> We expect application-specific serverless computing to grow, but we are most excited about the potential emergence of general-purpose serverless abstractions, which could host software ecosystems catering to every need. In our view, only the general-purpose approach can ultimately displace servers to become the default form of cloud programming. However, general-purpose serverless technology does not exist today, and developing it presents research challenges.</p> <!-- END BODY-5 --> <p><a href="#">Back to Top</a></p> <!-- BEGIN BODY-6 --> <p><a name="body-6"></a></p> <h3>Research Challenges</h3> <p>Serverless computing is evolving rapidly and offers various research challenges, many of them common to both application-specific and general-purpose serverless.</p> <p><strong>State management.</strong> Distributed cloud applications often need to exchange short-lived or ephemeral state between their component tasks. Examples include application-wide caches, indexes, and other lookup tables, or intermediate results of big data analytics. Cloud functions today allow applications to store ephemeral state locally at each function, which is useful for caching and as working memory for the program. Serverless shared state may be saved in object storage or key-value stores, but these do not simultaneously provide low latency, low cost, high throughput, and fine-grained access, as is possible with servers.<sup><a href="#R17">17</a></sup> Approaches to addressing these challenges include temporary data storage for analytics<sup><a href="#R21">21</a></sup> as well as stateful cloud functions that integrate caching and provide consistency guarantees.<sup><a href="#R29">29</a></sup></p> <p><strong>Networking.</strong> Cloud functions transfer the responsibility of scheduling work from the user to the cloud provider, which has several interesting consequences. Since users cede control over when functions run, passing state between cloud functions requires a trip through shared storage; direct network communication makes little sense and cloud providers block it. Accessing shared storage adds significant latency, sometimes hundreds of milliseconds. Users also cede control over where functions run, thus precluding optimizations common with servers, including sharing common inputs between tasks and combining outputs before sending them over the network (see <a href="https://dl.acm.org/cms/attachment/250c339b-520a-448a-b302-bc127f4c8339/f4.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1022,height=879'); return false;">Figure 4</a> and previous discussion). Attempts to overcome these challenges will highlight the tension between giving programmers more control and allowing the cloud provider to make optimizations automatically.</p> <p><strong>Predictable performance.</strong> Both FaaS and BaaS can exhibit variable performance which precludes their use in applications that must meet strict guarantees. Part of the reason for this is fundamental: serverless providers rely on statistical multiplexing to create the illusion of infinite resources, while denying users control over resource oversubscription. There is always some chance that unfortunate timing will create queuing delays. There is also a latency cost to reassigning resources from one customer to another, which in the cloud function context is known as a “cold start.” Cold start latency has several components,<sup><a href="#R17">17</a></sup> and significant among them is the time it takes to initialize the software environment of the function. There has already been progress in this area. Cloud function environments such as Google gVisor and AWS Firecracker<sup><a href="#R1">1</a></sup> can now start in about 100 ms, whereas traditional VMs take tens of seconds to boot. It is also possible to accelerate application-level initialization such as loading libraries.<sup><a href="#R26">26</a></sup> There is probably still much room for improvement in these areas, though there is also evidence that performance optimization and isolation for security are fundamentally at odds.<sup><a href="#R24">24</a></sup> Customers of AWS Lambda can also avoid cold start latencies by purchasing “provisioned concurrency,” which controversially reintroduces a form of resource reservation to the serverless model. We hope to also see pricing based on statistical guarantees, or Service Level Objectives (SLOs), which are absent in serverless today.</p> <p><strong>Security.</strong> Serverless computing leads to fine-grained resource sharing and so increases the exposure to <em>side-channel attacks</em>, whereby attackers exploit subtle behaviors of real hardware that differ from either specifications or programmer assumptions (see sidebar <a href="#sidebar-2">“Serverless and Security”</a>). Threats range from Rowhammer attacks on DRAM<sup><a href="#R20">20</a></sup> to those exploiting microarchitectural vulnerabilities.<sup><a href="#R22">22</a></sup> In addition to adopting mitigations developed for serverful computing, serverless might employ randomized scheduling to make it more difficult for an attacker to target a specific victim. Serverless computing also can incur greater information leakage through network communication because of the finegrained decomposition of an application and physical distribution of its pieces. An attacker observing the size and timing of network traffic, even if it is encrypted, might make inferences about private data. Addressing these risks may be possible through oblivious computing.<sup><a href="#R12">12</a></sup></p> <p><strong>Programming languages.</strong> Simplified distributed systems programming is a core benefit of serverless computing,<sup><a href="#R18">18</a></sup> and while much previous work in this area is relevant, the serverless setting calls for a new perspective and adds urgency. Traditional challenges include fault tolerance, consistency, concurrency, and the performance and efficiency that comes from locality. New challenges include first-class support for autoscaling, pay-as-you-go, and fine-grained multiplexing.</p> <p>Fault tolerance concerns are elevated by attempts to extend serverless computing beyond stateless cloud functions. Azure Durable Functions uses C# language features to provide transparent checkpointing, which makes it easier to write stateful and resumable serverless tasks. Microsoft Orleans,<sup><a href="#R5">5</a></sup> which implements an <em>actor model</em>,<sup><a href="#R15">15</a></sup> similarly hides fault tolerance concerns from programmers. Actors also provide a notion of locality, and could be a counterpart to cloud functions for stateful serverless computing. Ray<sup><a href="#R25">25</a></sup> embodies elements of both. Approaches to consistency include language-integrated transactions, pioneered by Argus.<sup><a href="#R23">23</a></sup> However, transactions are fraught with performance and scalability challenges, which an autoscaling serverless environment may exacerbate. An alternative approach lies in languages like Bloom,<sup><a href="#R3">3</a></sup> which allows automated analysis to determine which parts of a program can run independently, without coordination, and thus scalably. Pay-as-you-go should encourage language developers to rethink resource management, for example, automated garbage collection might be adapted to metered memory pricing. Language approaches to cloud programming,<sup><a href="#R9">9</a></sup> which address the complexity of distributed systems programming head-on, may represent the most direct and ambitious approach to simplifying cloud programming.</p> <p><strong>Machine learning.</strong> We believe that automatic optimization with machine learning will play an important role in all of the areas discussed above. It may help decide where to run code, where to keep state, when to start up a new execution environment, and how to keep utilization high and costs low while meeting performance objectives. It may also aid in identifying malicious activity that threatens security, or in automatically cutting up large programs into pieces that can execute in separate cloud functions. Machine learning can help optimize serverful computing too,<sup><a href="#R10">10</a></sup> but serverless abstractions give cloud providers more control over the relevant knobs, as well as the visibility across many customers required to train robust and effective models.</p> <p><strong>Hardware.</strong> Current trends in hardware may be complementary to server-less computing. The x86 microprocessors that dominate the cloud are barely improving in performance; in 2017, program latency improved only 3%,<sup><a href="#R14">14</a></sup> a trend that if continued implies that performance won’t double for 20 years. Similarly, the ending of Moore’s Law is slowing the growth of per-chip DRAM capacity. The industry response has been the introduction of Domain Specific Architectures (DSAs), which are tailored to a specific type of problem, offering significant performance and efficiency gains, but performing poorly for other applications.<sup><a href="#R14">14</a></sup> GPUs have long been used to accelerate graphics, and we are starting to see DSAs for ML such as TPUs. GPUs and TPUs can outperform CPUs for narrow tasks by factors of 30x.<sup><a href="#R19">19</a></sup> These examples are the first of many, as general-purpose processors enhanced with DSAs will likely become the norm.</p> <hr> <blockquote> <p><em>It is striking how little cloud computing has changed how programmers work to date, especially when compared to the impact it has had on operators.</em></p> </blockquote> <hr> <p>We believe serverless computing may provide a useful programming model for integrating diverse architectures, say with separate cloud functions running on separate accelerators. It also helps create room for innovation by raising the level of abstraction, for example, by allowing a cloud provider to substitute a DSA for a CPU when recognizing a workload that could benefit.</p> <!-- END BODY-6 --> <p><a href="#">Back to Top</a></p> <!-- BEGIN BODY-7 --> <p><a name="body-7"></a></p> <h3>Why Serverless Computing Might Still Fail</h3> <p>While we believe serverless computing can grow to become the cloud programming default, we can also imagine several scenarios in which serverful computing retains its dominance. First, serverful computing is a moving target, one that improves relentlessly, if slowly. Cloud VMs that once were billed by the hour now have a minimum billing increment of one minute, and charge by the second thereafter. Container and VM orchestration tools (for example, Kubernetes, Terraform) help streamline complex deployments, and increasingly automate administrative tasks such as taking backups. Programmers can rely on mature software ecosystems and strong legacy compatibility when building applications, while companies already have teams skilled in serverful cloud deployments. Server hardware also keeps getting bigger and more powerful, bringing CPU, memory, and accelerator power together in a closely coupled environment, a benefit for some applications.</p> <p>Second, today’s successful serverless products fall into the application-specific category and are narrowly targeted, whereas general-purpose serverless abstractions have a better chance of displacing serverful computing (which is also general-purpose). However general-purpose serverless computing faces hurdles: the technology that we envision does not exist yet, and it may be a less lucrative business for cloud providers.</p> <p>Finally, even if our vision plays out, the brand of “serverless computing” might not survive. The temptation to label older products as the next new thing is strong and can create confusion in the marketplace. We have been happy to see products such as Google App Engine pick up the serverless moniker, and along with it features such as scaling to zero. However, if the term becomes diluted by half-hearted efforts, then perhaps general-purpose serverless computing will emerge under another name.</p> <!-- END BODY-7 --> <p><a href="#">Back to Top</a></p> <!-- BEGIN BODY-8 --> <p><a name="body-8"></a></p> <h3>Conclusion and Predictions</h3> <p>Cloud computing is both flourishing and evolving. It has overcome the challenges that faced it in 2010, as we projected.<sup><a href="#R4">4</a></sup> Offering lower costs and simplified system administration, the business is growing up to 50% annually and proving highly profitable for cloud providers. Cloud computing is now entering a second phase in which its continued growth will be driven by a new value proposition: simplified cloud programming.</p> <p>Analogous to how hailing a taxi simplifies transportation over renting a car (see <a href="https://dl.acm.org/cms/attachment/d7c7af17-b8eb-4da0-b976-e2f1778cd8f3/f1.jpg" onclick="window.open(this.href, '', 'resizable=yes,status=no,location=no,toolbar=no,menubar=no,fullscreen=no,scrollbars=no,dependent=no,width=1021,height=842'); return false;">Figure 1</a>), serverless computing relieves programmers from thinking about servers and everything complicated that goes along with them. Following the same naming convention, you could classify a taxi service as <em>carless transportation</em> in that the passenger need not know how to operate a car to get a ride. Serverless raises the level of abstraction of the cloud, adopts pay-as-you-go pricing, and rapidly auto-scales down to zero and up to practically infinite resources.</p> <p>Serverless computing is still evolving, and many open questions remain, both in defining its abstractions and in implementing them. We (boldly) conclude this paper with five predictions for serverless computing in the next decade:</p> <ol> <li>Today’s FaaS and BaaS categories will give way to a broader range of abstractions, which we categorize as either <em>general-purpose serverless computing</em> or <em>application-specific serverless computing.</em> While serverful cloud computing won’t disappear, its relative use in the cloud will decline as serverless computing overcomes its current limitations.</li> <li>We expect new general-purpose serverless abstractions to support just about any use case. They will support state management, as well as optimizations鈥攅ither user-suggested or automatically inferred鈥攖o achieve efficiencies comparable or maybe better than those of serverful computing.</li> <li>We see no fundamental reason for the cost of serverless computing to exceed that of serverful computing. We predict that as severless evolves and increases in popularity almost any application, be it tiny or massive-scale, costs no more鈥攁nd perhaps a lot less鈥攚ith serverless computing</li> <li>Machine learning will play a critical role in serverless implementations, allowing cloud providers to optimize execution of large-scale distributed systems while providing a simple programming interface.</li> <li>Computer hardware for serverless computing will be much more heterogeneous than the conventional x86 servers that powers it today.</li> </ol> <p>If these predictions hold, serverless computing will become the default computing paradigm of the Cloud Era, largely replacing serverful computing and thereby closing the Client-Server Era, just as the smartphone brought the end of the PC Era.</p> <p><strong>Acknowledgments.</strong> We thank the reviewers for their thoughtful comments, as well as the many friends who gave feedback on early drafts. This work was conducted at UC Berkeley RISELab and it was supported by a National Science Foundation Expedition Project, Alibaba Group, Amazon Web Services, Ant Financial, Ericsson, Facebook, Future-wei, Google, Intel, Microsoft, Scotia-bank, Splunk, and VMware.</p> <!-- END BODY-8 --> <p><a href="#">Back to Top</a></p> <p><a href="#">Back to Top</a></p> <p><a href="#">Back to Top</a></p> <p><a href="#">Back to Top</a></p> <!-- BEGIN SIDEBAR-1 --> <div class="ArticleSidebar" id="article-sidebar-1"><a name="sidebar-1"></a> <h3>Sidebar: The Cost of Serverless</h3> <p>If you compare the per-minute cost of running an AWS Lambda cloud function with the cost of an AWS t3.nano VM with the equivalent 0.5 GB memory, it might look like serverless computing is 7.5x as expensive. Such a comparison is misleading, however.</p> <p>The beauty of serverless computing is that it provides much more than servers, yet results in cloud bills that are often much lower. Included in the price is redundancy for availability, monitoring, logging, and automated scaling, all of which need to be provided separately in a serverful context. Cost comparisons must also factor in expected utilization, since serverless users pay only while their code executes. The users of the t3.nano VM must pay for the resources reserved, whether their code is running or not. Cloud providers claim that in practice customers see cost savings of 4x-10x when moving applications to serverless.<sup><a href="#R30">30</a></sup></p> <p>While serverless often saves money, for some organizations the pay-as-you-go model is at odds with the way they manage their budgets. These may be fixed in advance, often annually. Planning to use a fixed amount of server capacity may seem easier, but managing to budget is challenging in practice, especially when many teams deploy cloud VMs, or when business needs are difficult to anticipate. We believe that as organizations use serverless more, they will be able to predict their costs based on history, similar to the way they do for other pay-as-you-go services, like electricity.</p> </div> <!-- END SIDEBAR-1 --> <p><a href="#">Back to Top</a></p> <!-- BEGIN SIDEBAR-2 --> <div class="ArticleSidebar" id="article-sidebar-2"><a name="sidebar-2"></a> <h3>Sidebar: Serverless and Security</h3> <p>Today, serverless computing merely shifts some security responsibilities from the cloud customer to the cloud provider, just as it shifts other system administration responsibilities. With cloud functions, security updates to operating systems, language runtimes, and standard software packages are applied without customer involvement, usually quickly and reliably. For BaaS services, the cloud provider assumes responsibility for securing everything behind an API. This path may prove to be an important advantage because it allows developers to reason about security at a higher abstraction level. They do not need to implement lower-level security mechanisms, which could lead to fewer security mistakes. While this benefit must be weighed against the exposure to attacks through shared hardware, we believe that improved abstractions may eventually make application security easier to achieve with serverless computing.</p> </div> <!-- END SIDEBAR-2 --> </div> </div> <footer class="article-footer"> <section class="article-references" data-component="accordion" data-slide-to-refs="true"> <a name="references"></a> <button class="accordion-controller" aria-expanded="false"> <span class="article-references__title"> References </span> <span class="accordion-controller-icon"> <svg aria-hidden="true" focusable="false" width="16" height="16" fill="var(--wp--preset--color--cacm-blue)"><use href="#am-symbol-icon-chevron-down"></use></svg> </span> </button> <ul class="article-references__text accordion-content"> <div id="article-references"><a name="references"></a> <p><a name="R1"></a>1. Agache, A., et al. Firecracker: Lightweight virtualization for serverless applications. In <em>Proceedings of the 17<sup>th</sup> USENIX Sym. Networked Systems Design and Implementation</em> (2020), 419–434.</p> <p><a name="R2"></a>2. Alcott, B. Jevons' paradox. <em>Ecological Economics 54</em>, 1 (2005), 9–21.</p> <p><a name="R3"></a>3. Alvaro, P., et al. Consistency analysis in Bloom: A CALM and collected approach. <em>CIDR</em>, 249–260.</p> <p><a name="R4"></a>4. Armbrust, M., et al. A view of cloud computing. Commun. ACM 53, 4 (Apr. 2010) 50–58.</p> <p><a name="R5"></a>5. Bernstein, P., et al. Orleans: Distributed virtual actors for programmability and scalability. MSR-TR-2014-41, 2014.</p> <p><a name="R6"></a>6. Brazeal, F. The business case for serverless, 2018; <a href="https://www.trek10.com/blog/business-case-for-serverless">https://www.trek10.com/blog/business-case-for-serverless</a></p> <p><a name="R7"></a>7. Brooks, F. No silver bullet: essence and accidents of software engineering. In <em>Information Processing.</em> IEEE, 1986.</p> <p><a name="R8"></a>8. Castro, P., et al. The rise of serverless computing. <em>Commun. ACM 66</em>, 12 (Dec. 2019), 44–54.</p> <p><a name="R9"></a>9. Cheung, A., Crooks, N., Milano, M., and Hellerstein, J. New directions in cloud programming. <em>CIDR</em>, 2021.</p> <p><a name="R10"></a>10. Dean, J. Machine learning for systems and systems for machine learning. In <em>Proceedings of the 2017 Conf. Neural Info. Processing System.</em></p> <p><a name="R11"></a>11. Dean, J. and Ghemawat, S. MapReduce: simplified data processing on large clusters. <em>Commun. ACM 51</em>, 1 (Jan. 2008), 107–113.</p> <p><a name="R12"></a>12. Goldreich, O. Towards a theory of software protection and simulation by oblivious RAMs. In <em>Proceedings of the 19<sup>th</sup> Annual ACM Symposium on Theory of Computing</em>, (1987) 182–194.</p> <p><a name="R13"></a>13. Hellerstein, J., et al. Serverless computing: One step forward, two steps back. <em>CIDR</em>, 2019.</p> <p><a name="R14"></a>14. Hennessy, J. and Patterson, D. A new golden age for computer architecture. <em>Commun. ACM 62</em>, 2 (Feb. 2019), 48–60.</p> <p><a name="R15"></a>15. Hewitt, C., Bishop, P., and Steiger, R. A universal modular actor formalism for artificial intelligence. In <em>Proceedings of the 3<sup>rd</sup> Intern. JoinConf. Artificial Intelligence.</em> (1973), 235–245. Morgan Kaufmann Publishers Inc.</p> <p><a name="R16"></a>16. Irwin, D. and Urgaonkar, B. Research Challenges at the Intersection of Cloud Computing and Economics. National Science Foundation, 2018.</p> <p><a name="R17"></a>17. Jonas, E. et al. Cloud programming simplified: A Berkeley view on serverless computing. Tech. Rep. No. UCB/EECS-2019-3, 2019.</p> <p><a name="R18"></a>18. Jonas, E., Pu, Q., Venkataraman, S., Stoica, I., and Recht, B. Occupy the cloud: Distributed computing for the 99%. In <em>Proceedings of the ACM SoCC</em>, 2017.</p> <p><a name="R19"></a>19. Jouppi, N. et al. In-datacenter performance analysis of a tensor processing unit. In <em>Proceedings of the 44<sup>th</sup> Annual Intern. Symp. Computer Architecture.</em> (2017), 1–12.</p> <p><a name="R20"></a>20. Kim, Y., et al. Flipping bits in memory without accessing them: An experimental study of DRAM disturbance errors. In <em>Proceeding of the 42<sup>nd</sup> ISCA.</em> IEEE Press, 2014, 361–372.</p> <p><a name="R21"></a>21. Klimovic, A., et al. Pocket: Elastic ephemeral storage for serverless analytics. In <em>Proceedings of the 13<sup>th</sup> USENIX Symp. Operating Systems Design and Implementation</em> (2018), 427–444.</p> <p><a name="R22"></a>22. Kocher, P., et al. Spectre attacks: Exploiting speculative execution. <em>Commun. ACM 63</em>, 7 (July 2020), 93–101.</p> <p><a name="R23"></a>23. Liskov, B. Distributed programming in Argus. <em>Commun. ACM 31</em>, 3 (Mar. 1988), 300–312.</p> <p><a name="R24"></a>24. McIlroy, R., Sevcik, J., Tebbi, T., Titzer, B., and Verwaest, T. Spectre is here to stay: An analysis of side-channels and speculative execution. 2019; arXiv:1902.05178.</p> <p><a name="R25"></a>25. Moritz, P., et al. Ray: A distributed framework for emerging AI applications. In <em>Proceedings of the 13<sup>th</sup> USENIX Symp. Operating Systems Design and Implementation</em> (2018), 561–577.</p> <p><a name="R26"></a>26. Oakes, E., et al. SOCK: Rapid task provisioning with serverless-optimized containers. In <em>2018 USENIX Annual Technical Conf.</em> (2018), 57–70.</p> <p><a name="R27"></a>27. Passwater, A. 2018 serverless community survey: Huge growth in serverless usage; <a href="https://serverless.com/blog/2018-serverless-community-survey-huge-growth-usage/">https://serverless.com/blog/2018-serverless-community-survey-huge-growth-usage/</a></p> <p><a name="R28"></a>28. Perron, M., Fernandez, R., DeWitt, D., and Madden, S. Starling: A scalable query engine on cloud functions. In <em>Proceedings of the 2020 ACM SIGMOD Intern. Conf. Management of Data</em> (2020), 131–141.</p> <p><a name="R29"></a>29. Sreekanti, V., et al. Cloudburst: Stateful functions-as-a-service. <em>Proc. VLDB 13</em>, 11 (2020), 2438–2452.</p> <p><a name="R30"></a>30. Wagner, T. Debunking serverless myths, 2018; <a href="https://www.slideshare.net/TimWagner/serverlessconf-2018-keynote-debunking-serverless-myths">https://www.slideshare.net/TimWagner/serverlessconf-2018-keynote-debunking-serverless-myths</a></p> </div> </ul> </section> <section class="article-footnotes" data-component="accordion" data-slide-to-refs="true"> <a name="footnotes"></a> <button class="accordion-controller" aria-expanded="false"> <span class="article-footnotes__title"> Footnotes </span> <span class="accordion-controller-icon"> <svg aria-hidden="true" focusable="false" width="16" height="16" fill="var(--wp--preset--color--cacm-blue)"><use href="#am-symbol-icon-chevron-down"></use></svg> </span> </button> <ul class="article-footnotes__text accordion-content"> <div id="article-footnotes"><a name="footnotes"></a> <p><a name="FNA"></a>a. Different cloud platforms have different names for their offerings: Azure Functions for Microsoft Azure, Cloud Functions for Alibaba Cloud, AWS Lambda for Amazon Web Services (AWS), Google Cloud Functions and Google Cloud Run for Google Cloud Platform (GCP), IBM Cloud Functions for IBM Cloud, and Oracle Functions for Oracle Cloud.</p> <p>The authors are associated with the UC Berkeley RISELab (Real-Time Intelligence Secure Explainable Systems Lab).</p> </div> </ul> </section> <section id="authors" class="article-authors" data-component="accordion"> <button class="accordion-controller" aria-expanded="false"> <span class="article-authors__title"> About the Authors </span> <span class="accordion-controller-icon"> <svg aria-hidden="true" focusable="false" width="16" height="16" fill="var(--wp--preset--color--cacm-blue)"><use href="#am-symbol-icon-chevron-down"></use></svg> </span> </button> <div class="article-authors__info accordion-content"> <div class="article-authors__info-text"> <div id="article-authorinfo"><a name="authorinfo"></a> <h4>Authors</h4> <p><strong>Johann Schleier-Smith</strong></p> <p><strong>Vikram Sreekanti</strong></p> <p><strong>Anurag Khandelwal</strong></p> <p><strong>Joao Carreira</strong></p> <p><strong>Neeraja J. Yadwadkar</strong></p> <p><strong>Raluca Ada Popa</strong></p> <p><strong>Joseph E. Gonzalez</strong></p> <p><strong>Ion Stoica</strong></p> <p><strong>David A. Patterson</strong></p> </div> </div> </div> </section> <ul class="share"> <li class="share-link" data-component="share"> <a href="#" class="share-toggle"> <svg aria-hidden="true" focusable="false" width="19" height="18" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-share"></use></svg> <span class="share-link-text"> Share </span> </a> <ul class="share-menu" aria-hidden="true"> <li> <a href="https://twitter.com/intent/tweet?url=https://cacm.acm.org/research/what-serverless-computing-is-and-should-become/&text=What%20Serverless%20Computing%20Is%20and%20Should%20Become:%20The%20Next%20Phase%20of%20Cloud%20Computing" target="_blank"> Twitter </a> </li> <li> <a href="http://www.reddit.com/submit?url=https://cacm.acm.org/research/what-serverless-computing-is-and-should-become/&title=What%20Serverless%20Computing%20Is%20and%20Should%20Become:%20The%20Next%20Phase%20of%20Cloud%20Computing" target="_blank"> Reddit </a> </li> <li> <a href="https://news.ycombinator.com/submitlink?u=https://cacm.acm.org/research/what-serverless-computing-is-and-should-become/&t=What%20Serverless%20Computing%20Is%20and%20Should%20Become:%20The%20Next%20Phase%20of%20Cloud%20Computing" target="_blank"> Hacker News </a> </li> </ul> </li> <li class="share-link share-link-pdf"> <a href="https://dl.acm.org/doi/pdf/10.1145/3406011" target="_blank"> <svg aria-hidden="true" focusable="false" width="19" height="20" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-pdf-download"></use></svg> <span class="share-link-text"> Download PDF </span> </a> </li> <li class="share-link share-link-print" data-component="print"> <a href="#" class="print"> <svg aria-hidden="true" focusable="false" width="19" height="20" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-print"></use></svg> <span class="share-link-text"> Print </span> </a> </li> <li class="share-link share-link-discussion" data-component="share"> <a class="share-link-comments" href="#comments"> <svg aria-hidden="true" focusable="false" width="19" height="20" fill="var(--cacm--symbol--fill)"><use href="#am-symbol-icon-comment"></use></svg> <span class="share-link-text">Join the Discussion</span> </a> </li> </ul> </footer> <div class="article-authors-digital-library"> <section class="article-submission"> <div class="article-submission__cta"> <div class="article-submission__cta-container"> <p class="article-submission__cta-title"> Submit an Article to CACM </p> <p class="article-submission__cta-text"> CACM welcomes unsolicited <a href="https://cacm.acm.org/author-guidelines/#CACMsubmission">submissions</a> on topics of relevance and value to the computing community. </p> </div> </div> </section> <section class="article-digital-library"> <div class="article-digital-library__article-info"> <p class="article-digital-library__intro-text"> You Just Read </p> <h4 class="article-digital-library__title"> What Serverless Computing Is and Should Become: The Next Phase of Cloud Computing </h4> <a class="article-digital-library__link" href="https://dl.acm.org/doi/10.1145/3406011"> <svg aria-hidden="true" focusable="false" width="21" height="21" fill="var(--wp--preset--color--cacm-black)"><use href="#am-symbol-icon-digital-library"></use></svg> View in the ACM Digital Library <svg aria-hidden="true" focusable="false" width="14" height="9" fill="var(--wp--preset--color--cacm-black)" class="icon-dl"><use href="#am-symbol-icon-arrow-right"></use></svg> </a> </div> <div class="article-digital-library__copyright-info"> <div id="article-permission"> <a name="permission"></a> <p>Copyright held by authors/owners.<br /> Request permission to (re)publish from the owner/author</p> </div> <p>The Digital Library is published by the Association for Computing Machinery. Copyright © 2021 ACM, Inc.</p> </div> </section> </div> <div class="article-sidebar"> <section class="article-doi"> <h3 class="article-doi__heading">DOI</h3> 10.1145/3406011</section> <section class="article-issue"> <div class="article-issue__meta"> <h3 class="article-issue__heading">May 2021 Issue</h3> <p class="article-issue__pub-date">Published: May 1, 2021</p> <p class="article-issue__vol-info">Vol. 64 No. 5</p> <p class="article-issue__page-info">Pages: 76-84</p> </div> <a href="https://cacm.acm.org/issue/may-2021/" class="article-issue__toc-link"> Table of Contents <span class="article-issue__toc-icon-arrow"><svg aria-hidden="true" focusable="false" width="14" height="9" fill="var(--wp--preset--color--cacm-blue)"><use href="#am-symbol-icon-arrow-right"></use></svg></span> </a> </section> <div class="ad ad-mobile ad--is-loading" data-component="ad" data-platform="mobile" data-show-ad="false"> <div class="cacm-ad-unit"> <p class="ad-label">Advertisement</p> <div class="ad-unit" data-pipeline-id="684700" data-dimension-id="599027"></div> <noscript><a href="https://acm.nui.media/pipeline/684700/0/cc?z=acm"><img src="https://acm.nui.media/pipeline/684700/0/vc?z=acm&dim=599027&kw=&click=&abr=$imginiframe" alt="" ></a></noscript> </div> </div> <div class="ad ad-desktop ad--is-loading" data-component="ad" data-platform="desktop" data-show-ad="false"> <div class="cacm-ad-unit"> <p class="ad-label">Advertisement</p> <div class="ad-unit" data-pipeline-id="684700" data-dimension-id="599027"></div> <noscript><a href="https://acm.nui.media/pipeline/684700/0/cc?z=acm"><img src="https://acm.nui.media/pipeline/684700/0/vc?z=acm&dim=599027&kw=&click=&abr=$imginiframe" alt="" ></a></noscript> </div> </div> </div> <section class="article-comments"> <div class="article-comments__inner container"> <h3 class="article-comments__heading"> Join the Discussion (0) </h3> <section class="cta-join-the-discussion" id="article-discussion"> <div class="cta-join-the-discussion__box"> <h4 class="cta-join-the-discussion__heading">Become a Member or Sign In to Post a Comment</h4> <div class="cta-join-the-discussion__button-group"> <a class="cta-join-the-discussion__button cta-join-the-discussion__button--login" href="https://cacm.acm.org/wp-login.php?saml_sso">Sign In</a> <a class="cta-join-the-discussion__button cta-join-the-discussion__button--signup" href="https://accounts.acm.org/">Sign Up</a> </div> </div> </section> <div id="comments" class="comments-area"> <div id="respond" class="auth-comment-form" data-component="authCommentForm" data-replytocom="0"> <div class="auth-comment-form__contents"> <span class="auth-comment-form__loader"> <svg version="1.1" id="L9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 0 0" xml:space="preserve"> <path fill="var(--wp--preset--color--cacm-blue)" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"> <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite" /> </path> </svg> </span> </div> </div> </div><!-- #comments --> </div> </section> <section class="post-list the-latest" data-layout="grid-three-up" data-component="postList" > <header class="section-header "> <h3 class="section-header__heading" > <a class="section-header__heading-link" href="/?s="> The Latest from CACM </a> </h3> <div class="section-header__readmore"> <a class="section-header__readmore-link" href="/?s=" aria-label=" Explore more from The Latest from CACM "> <span class="section-header__readmore-text">Explore More</span> <span class="section-header__readmore-icon"><svg aria-hidden="true" focusable="false" width="14" height="9"><use href="#am-symbol-icon-arrow-right"></use></svg></span> </a> </div> </header> <div class=""> <div class="post-list__content"><div class="post-list__item"> <article id="post-762756" class="post-list__post post-762756 post type-post status-publish format-standard has-post-thumbnail hentry category-education section-blogcacm"> <div class="post-list__post-content"> <div class="post-list__post-text"> <div class="post-list__post-eyebrow"> <a href="https://cacm.acm.org/section/blogcacm/">BLOG@CACM</a> <span class="post-list__post-timestamp"><span class="posted-on"> Nov 26 2024</span></span> </div> <p class="post-list__post-heading"> <a href="https://cacm.acm.org/blogcacm/heutagogy-in-computer-science-education/">Heutagogy in Computer Science Education</a> </p> <div class="post-list__post-meta-group"> <div class="post-list__post-byline"> <a href="https://cacm.acm.org/author/orit-hazzan/" title="Posts by Orit Hazzan" class="author url fn" rel="author">Orit Hazzan</a> </div> <span class="post-list__post-topic"><a href="https://cacm.acm.org/category/education/">Education</a></span> </div> </div> <figure class="post-list__post-figure"> <a href="https://cacm.acm.org/blogcacm/heutagogy-in-computer-science-education/" aria-label="Heutagogy in Computer Science Education" aria-hidden="true" tabindex="-1"> <div class="image-wrapper image-wrapper--widescreen"><img width="1024" height="576" src="https://cacm.acm.org/wp-content/uploads/2024/11/112224.BLOG_.Heutagogy-G.jpg" class="attachment-full size-full" alt="lower legs climbing colorful stairs" decoding="async" loading="lazy" srcset="https://cacm.acm.org/wp-content/uploads/2024/11/112224.BLOG_.Heutagogy-G.jpg 2400w, https://cacm.acm.org/wp-content/uploads/2024/11/112224.BLOG_.Heutagogy-G.jpg?resize=300,169 300w, https://cacm.acm.org/wp-content/uploads/2024/11/112224.BLOG_.Heutagogy-G.jpg?resize=768,432 768w, https://cacm.acm.org/wp-content/uploads/2024/11/112224.BLOG_.Heutagogy-G.jpg?resize=1024,576 1024w, https://cacm.acm.org/wp-content/uploads/2024/11/112224.BLOG_.Heutagogy-G.jpg?resize=1536,864 1536w, https://cacm.acm.org/wp-content/uploads/2024/11/112224.BLOG_.Heutagogy-G.jpg?resize=2048,1152 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div> </a> </figure> </div> </article> </div> <div class="post-list__item"> <article id="post-762751" class="post-list__post post-762751 post type-post status-publish format-standard has-post-thumbnail hentry category-security-and-privacy category-systems-and-networking section-news"> <div class="post-list__post-content"> <div class="post-list__post-text"> <div class="post-list__post-eyebrow"> <a href="https://cacm.acm.org/section/news/">News</a> <span class="post-list__post-timestamp"><span class="posted-on"> Nov 25 2024</span></span> </div> <p class="post-list__post-heading"> <a href="https://cacm.acm.org/news/email-insecurity/">Email Insecurity</a> </p> <div class="post-list__post-meta-group"> <div class="post-list__post-byline"> <a href="https://cacm.acm.org/author/david-geer/" title="Posts by David Geer" class="author url fn" rel="author">David Geer</a> </div> <span class="post-list__post-topic"><a href="https://cacm.acm.org/category/security-and-privacy/">Security and Privacy</a></span> </div> </div> <figure class="post-list__post-figure"> <a href="https://cacm.acm.org/news/email-insecurity/" aria-label="Email Insecurity" aria-hidden="true" tabindex="-1"> <div class="image-wrapper image-wrapper--widescreen"><img width="1024" height="576" src="https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Email-Insecurity-S.jpg" class="attachment-full size-full" alt="U.S. Capitol building seen through a pair of open doors" decoding="async" loading="lazy" srcset="https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Email-Insecurity-S.jpg 2400w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Email-Insecurity-S.jpg?resize=300,169 300w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Email-Insecurity-S.jpg?resize=768,432 768w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Email-Insecurity-S.jpg?resize=1024,576 1024w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Email-Insecurity-S.jpg?resize=1536,864 1536w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Email-Insecurity-S.jpg?resize=2048,1152 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div> </a> </figure> </div> </article> </div> <div class="post-list__item"> <article id="post-762633" class="post-list__post post-762633 post type-post status-publish format-standard has-post-thumbnail hentry category-artificial-intelligence-machine-learning category-security-and-privacy section-news"> <div class="post-list__post-content"> <div class="post-list__post-text"> <div class="post-list__post-eyebrow"> <a href="https://cacm.acm.org/section/news/">News</a> <span class="post-list__post-timestamp"><span class="posted-on"> Nov 21 2024</span></span> </div> <p class="post-list__post-heading"> <a href="https://cacm.acm.org/news/detecting-explaining-industrial-hacks/">Detecting/Explaining Industrial Hacks</a> </p> <div class="post-list__post-meta-group"> <div class="post-list__post-byline"> <a href="https://cacm.acm.org/author/r-colin-johnson/" title="Posts by R. Colin Johnson" class="author url fn" rel="author">R. Colin Johnson</a> </div> <span class="post-list__post-topic"><a href="https://cacm.acm.org/category/artificial-intelligence-machine-learning/">Artificial Intelligence and Machine Learning</a></span> </div> </div> <figure class="post-list__post-figure"> <a href="https://cacm.acm.org/news/detecting-explaining-industrial-hacks/" aria-label="Detecting/Explaining Industrial Hacks" aria-hidden="true" tabindex="-1"> <div class="image-wrapper image-wrapper--widescreen"><img width="1024" height="576" src="https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Detecting-Explaining-S.jpg" class="attachment-full size-full" alt="crack with light effect, illustration" decoding="async" loading="lazy" srcset="https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Detecting-Explaining-S.jpg 2400w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Detecting-Explaining-S.jpg?resize=300,169 300w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Detecting-Explaining-S.jpg?resize=768,432 768w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Detecting-Explaining-S.jpg?resize=1024,576 1024w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Detecting-Explaining-S.jpg?resize=1536,864 1536w, https://cacm.acm.org/wp-content/uploads/2024/11/112024.News_.Detecting-Explaining-S.jpg?resize=2048,1152 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div> </a> </figure> </div> </article> </div> </div> </div> </section> <div class="cta-membership cta-membership--no-js" data-component="ctaMembership"> <section class="cta-become-a-member"> <div class="cta-become-a-member__inner container"> <h3 class="cta-become-a-member__heading"> Shape the Future of Computing </h3> <p class="cta-become-a-member__description"> ACM encourages its members to take a direct hand in shaping the future of the association. There are more ways than ever to get involved. </p> <a class="cta-become-a-member__link" href="https://www.acm.org/about-acm/get-involved"> Get Involved </a> </div> </section> <section class="cta-open-access"> <div class="cta-open-access__inner container"> <h3 class="cta-open-access__heading"> Communications of the ACM (CACM) is now a fully Open Access publication. </h3> <p class="cta-open-access__description"> By opening CACM to the world, we hope to increase engagement among the broader computer science community and encourage non-members to discover the rich resources ACM has to offer. </p> <a class="cta-open-access__link" href="https://cacm.acm.org/news/cacm-is-becoming-open-access"> Learn More </a> </div> </section> </div> </article><!-- #post-## --> </main> </div> </div><!-- #content --> <footer id="colophon" class="site-footer"> <div class="site-footer__inner container"> <div class="site-footer__columns"> <div class="site-footer__column site-footer__column-branding"> <a class="site-footer__logo" aria-label="Home" href="https://cacm.acm.org"> <svg aria-hidden="true" focusable="false" width="548" height="88" fill="#FFF"><use href="#am-symbol-cacm-logo"></use></svg> </a> <nav class="social-navigation"> <ul class="social-navigation__list"> <li> <a href="https://twitter.com/cacmmag"> <span class="screen-reader-only">CACM on Twitter</span> <svg aria-hidden="true" focusable="false" width="38" height="38" fill="#fff"><use href="#am-symbol-icon-social-twitter"></use></svg> </a> </li> <li> <a href="https://www.reddit.com/user/TheOfficialACM"> <span class="screen-reader-only">CACM on Reddit</span> <svg aria-hidden="true" focusable="false" width="38" height="38" fill="#fff"><use href="#am-symbol-icon-social-reddit"></use></svg> </a> </li> <li> <a href="https://www.linkedin.com/groups/36836/"> <span class="screen-reader-only">CACM on LinkedIn</span> <svg aria-hidden="true" focusable="false" width="38" height="38" fill="#fff"><use href="#am-symbol-icon-social-linkedin"></use></svg> </a> </li> </ul> </nav> </div> <div class="site-footer__column site-footer__column-topics"> <div class="site-footer__topics-menu"> <p class="site-footer__heading"> Topics </p> <ul class="site-footer__topics-menu__list"> <li> <a href="https://cacm.acm.org/category/architecture-and-hardware/"> Architecture and Hardware </a> </li> <li> <a href="https://cacm.acm.org/category/artificial-intelligence-machine-learning/"> Artificial Intelligence and Machine Learning </a> </li> <li> <a href="https://cacm.acm.org/category/computer-history/"> Computer History </a> </li> <li> <a href="https://cacm.acm.org/category/computing-applications/"> Computing Applications </a> </li> <li> <a href="https://cacm.acm.org/category/computing-profession/"> Computing Profession </a> </li> <li> <a href="https://cacm.acm.org/category/data-and-information/"> Data and Information </a> </li> <li> <a href="https://cacm.acm.org/category/education/"> Education </a> </li> <li> <a href="https://cacm.acm.org/category/hci/"> HCI </a> </li> <li> <a href="https://cacm.acm.org/category/philosophy-of-computing/"> Philosophy of Computing </a> </li> <li> <a href="https://cacm.acm.org/category/security-and-privacy/"> Security and Privacy </a> </li> <li> <a href="https://cacm.acm.org/category/society/"> Society </a> </li> <li> <a href="https://cacm.acm.org/category/software-engineering-and-programming-languages/"> Software Engineering and Programming Languages </a> </li> <li> <a href="https://cacm.acm.org/category/systems-and-networking/"> Systems and Networking </a> </li> <li> <a href="https://cacm.acm.org/category/theory/"> Theory </a> </li> </ul> </div> </div> <div class="site-footer__column site-footer__column-about"> <div class="site-footer__menu-magazine"> <p class="site-footer__heading">Magazine</p> <ul id="menu-magazine-footer" class="site-footer__menu-magazine-menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-217988"><a href="/issue/latest/" id="menu-link-10">Latest Issue</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-217989"><a href="/issues/" id="menu-link-11">Magazine Archive</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224644"><a href="https://cacm.acm.org/editorial-staff-board/" id="menu-link-12">Editorial Staff and Board</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-751386"><a href="https://cacm.acm.org/author-guidelines#CACMsubmission" id="menu-link-13">Submit an Article</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224585"><a href="https://cacm.acm.org/feeds-2/" id="menu-link-14">Alerts & Feeds</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224645"><a href="https://cacm.acm.org/author-guidelines/" id="menu-link-15">Author Guidelines</a></li> </ul> </div> <div class="site-footer__menu-communications"> <p class="site-footer__heading">Communications of the ACM</p> <ul id="menu-communications-footer" class="site-footer-communications-menu"><li id="menu-item-224637" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224637"><a href="https://cacm.acm.org/about-us/" id="menu-link-16">About Us</a></li> <li id="menu-item-224664" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224664"><a href="https://cacm.acm.org/faq/" id="menu-link-17">Frequently Asked Questions</a></li> <li id="menu-item-224638" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224638"><a href="https://cacm.acm.org/contact-us/" id="menu-link-18">Contact Us</a></li> <li id="menu-item-217972" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-217972"><a href="https://www.acm.org/publications/advertising" id="menu-link-19">For Advertisers</a></li> <li id="menu-item-224639" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-224639"><a href="https://cacm.acm.org/join-acm/" id="menu-link-20">Join ACM</a></li> </ul> </div> </div> </div> <div class="site-footer__info"> <div class="site-footer__info__inner"> <p class="site-footer__info-copyright"><small> © 2024 Communications of the ACM. All Rights Reserved. </small></p> <div class="menu-policy-menu-container"><ul id="menu-policy-footer" class="site-footer__info-policy-list"><li id="menu-item-217993" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-217993"><a href="https://www.acm.org/cookie-notice" id="menu-link-21">Cookie Notice</a></li> <li id="menu-item-217994" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-217994"><a href="https://www.acm.org/about-acm/privacy-policy" id="menu-link-22">Privacy Policy</a></li> </ul></div> </div> </div> </div> </footer><!-- #colophon --> </div><!-- #page --> <script type="text/javascript" src="https://cacm.acm.org/wp-content/themes/cacm/client/build/js/global.bundle.min.js?ver=e97a984b44ccc756957f" id="cacm-global-js"></script> <script type="text/javascript" src="https://cacm.acm.org/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script> <script type="text/javascript" src="https://cacm.acm.org/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script type="text/javascript" id="wp-i18n-js-after"> /* <![CDATA[ */ wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); /* ]]> */ </script> <script type="text/javascript" id="cacm-article-js-extra"> /* <![CDATA[ */ var cacmLocalVars = {"restCommentsUrl":"https:\/\/cacm.acm.org\/wp-json\/wp\/v2\/comments","restCommentFormUrl":"https:\/\/cacm.acm.org\/wp-json\/cacm-plugin\/v1\/comment\/form\/117548"}; /* ]]> */ </script> <script type="text/javascript" src="https://cacm.acm.org/wp-content/themes/cacm/client/build/js/article.bundle.min.js?ver=237e66042b6c917cfd09" id="cacm-article-js"></script> <script type="text/javascript" src="https://cacm.acm.org/wp-includes/js/comment-reply.min.js?ver=6.7.1" id="comment-reply-js" async="async" data-wp-strategy="async"></script> <script type="text/javascript" src="https://stats.wp.com/e-202448.js" id="jetpack-stats-js" data-wp-strategy="defer"></script> <script type="text/javascript" id="jetpack-stats-js-after"> /* <![CDATA[ */ _stq = window._stq || []; _stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"212686646\",\"post\":\"117548\",\"tz\":\"-5\",\"srv\":\"cacm.acm.org\",\"hp\":\"vip\",\"j\":\"1:14.0\"}") ]); _stq.push([ "clickTrackerInit", "212686646", "117548" ]); /* ]]> */ </script> <!-- Mopinion Pastea.se start --><script type="text/javascript">(function(){var id="Sh2m7XRvbVWoA8uJG6g2wIBNDLfpsOxFx1ciwKwo";var js=document.createElement("script");js.setAttribute("type","text/javascript");js.setAttribute("src","//deploy.mopinion.com/js/pastease.js");js.async=true;document.getElementsByTagName("head")[0].appendChild(js);var t=setInterval(function(){try{Pastease.load(id);clearInterval(t)}catch(e){}},50)})();</script> <!-- Mopinion Pastea.se end --> </body> </html>