{"id":85859,"date":"2021-05-10T09:00:47","date_gmt":"2021-05-10T16:00:47","guid":{"rendered":""},"modified":"2025-08-26T14:12:05","modified_gmt":"2025-08-26T21:12:05","slug":"making-ebpf-work-on-windows","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/","title":{"rendered":"Making eBPF work on Windows"},"content":{"rendered":"\n<p><a href=\"https:\/\/ebpf.io\" target=\"_blank\" rel=\"noopener\">eBPF<\/a> is a well-known but revolutionary technology\u2014providing programmability, extensibility, and agility. eBPF has been applied to use cases such as denial-of-service protection and observability. Over time, a significant ecosystem of tools, products, and experience has been built up around eBPF. Although support for eBPF was first implemented in the Linux kernel, there has been increasing interest in allowing eBPF to be used on other operating systems and also to extend user-mode services and daemons in addition to just the kernel.<\/p>\n\n\n\n<p>Today we are excited to announce a new Microsoft open source project to make eBPF work on Windows 10 and Windows Server 2016 and later. The <a href=\"https:\/\/aka.ms\/ebpf-for-windows\" target=\"_blank\" rel=\"noopener\">ebpf-for-windows project<\/a> aims to allow developers to use familiar eBPF toolchains and application programming interfaces (APIs) on top of existing versions of Windows. Building on the work of others, this project takes several existing eBPF open source projects and adds the \u201cglue\u201d to make them run on Windows.<\/p>\n\n\n\n<p>We are announcing this now while the project is still relatively early in development because our goal is to work in collaboration with the robust eBPF community to make sure that eBPF works great on Windows, and everywhere else.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"architectural-overview\">Architectural overview<\/h2>\n\n\n\n<p>The following diagram illustrates the architecture of this project and related components:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2021\/05\/open-source.jpg\" alt=\"illustrates the architecture of this project and related components\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>As shown in the diagram, existing eBPF toolchains such as clang can be used to generate eBPF bytecode from source code in various languages. The resulting bytecode can then be used by any application or manually through the Windows netsh command-line tool, both of which use a shared library that exposes <a href=\"https:\/\/github.com\/libbpf\/libbpf\" target=\"_blank\" rel=\"noopener\">Libbpf APIs<\/a>, though this work is still in progress.<\/p>\n\n\n\n<p>The library sends the eBPF bytecode to a static verifier (the&nbsp;<a href=\"https:\/\/github.com\/vbpf\/ebpf-verifier\" target=\"_blank\" rel=\"noopener\">PREVAIL verifier<\/a>) that is hosted in a user-mode&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/services\/protecting-anti-malware-services-#system-protected-process\" target=\"_blank\" rel=\"noopener\">protected process<\/a>, which is a Windows security environment that allows a kernel component to trust a user-mode daemon signed by a key that it trusts. If the bytecode passes all the verifier\u2019s safety checks, the bytecode can be either loaded into the&nbsp;<a href=\"https:\/\/github.com\/iovisor\/ubpf\" target=\"_blank\" rel=\"noopener\">uBPF<\/a>&nbsp;interpreter running in a Windows kernel-mode execution context or compiled by the&nbsp;<a href=\"https:\/\/github.com\/iovisor\/ubpf\" target=\"_blank\" rel=\"noopener\">uBPF<\/a>&nbsp;just-in-time (JIT) compiler and have native code loaded into the kernel-mode execution context.<\/p>\n\n\n\n<p>eBPF programs installed into the kernel-mode execution context can attach to various hooks to handle events and call various helper APIs exposed by the eBPF shim, which internally wraps public Windows kernel APIs, allowing the use of eBPF on existing versions of Windows. So far, two hooks (XDP and socket bind) have been added, and though these are networking-specific hooks, we expect many more hooks and helpers, not just networking-related, will be added over time<em>.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"is-this-a-fork-of-ebpf\">Is this a fork of eBPF?<\/h2>\n\n\n\n<p>In short, no.<\/p>\n\n\n\n<p>The eBPF for Windows project leverages existing open source projects, including the <a href=\"https:\/\/github.com\/iovisor\/ubpf\" target=\"_blank\" rel=\"noopener\">IOVisor uBPF project<\/a> and the <a href=\"https:\/\/github.com\/vbpf\/ebpf-verifier\" target=\"_blank\" rel=\"noopener\">PREVAIL verifier<\/a>, running them on top of Windows by adding the Windows-specific hosting environment for that code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"does-this-provide-app-compatibility-with-ebpf-programs-written-for-linux\">Does this provide app compatibility with eBPF programs written for Linux?<\/h2>\n\n\n\n<p>The intent is to provide source code compatibility for code that uses common hooks and helpers that apply across Operating System ecosystems.<\/p>\n\n\n\n<p>Linux provides many hooks and helpers, some of which are very Linux specific (using Linux internal data structs, for example) that would not be applicable to other platforms. Other hooks and helpers are generically applicable, and the intent is to support them for eBPF programs.<\/p>\n\n\n\n<p>Similarly, the eBPF for Windows project exposes <a href=\"https:\/\/github.com\/libbpf\/libbpf\" target=\"_blank\" rel=\"noopener\">Libbpf APIs<\/a>&nbsp;to provide source code compatibility for applications that interact with eBPF programs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"learn-more-and-contribute\">Learn more and contribute<\/h2>\n\n\n\n<p>The <a href=\"https:\/\/aka.ms\/ebpf-for-windows\" target=\"_blank\" rel=\"noopener\">ebpf-for-windows project<\/a> brings the power of eBPF to Windows users and is intended to eventually reside in a community-governed foundation in the eBPF ecosystem. With your input and help, we can get there.<\/p>\n\n\n\n<p>Reach out to us or create an issue on <a href=\"https:\/\/aka.ms\/ebpf-for-windows\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>. We\u2019re excited to continue to refine and extend ebpf-for-windows so that everyone can benefit from this project. We are eager to see what you discover with this project and how it evolves.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>eBPF is a well-known but revolutionary technology\u2014providing programmability, extensibility, and agility. eBPF has been applied to use cases such as denial-of-service protection and observability. Over time, a significant ecosystem of tools, products, and experience has been built up around eBPF.<\/p>\n","protected":false},"author":5562,"featured_media":95476,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[227],"content-type":[],"topic":[],"programming-languages":[],"coauthors":[1790,1793],"class_list":["post-85859","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-windows","review-flag-new-1593580248-669"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Making eBPF work on Windows | Microsoft Open Source Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Making eBPF work on Windows | Microsoft Open Source Blog\" \/>\n<meta property=\"og:description\" content=\"eBPF is a well-known but revolutionary technology\u2014providing programmability, extensibility, and agility. eBPF has been applied to use cases such as denial-of-service protection and observability. Over time, a significant ecosystem of tools, products, and experience has been built up around eBPF.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-10T16:00:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-26T21:12:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Dave Thaler, Poorna Gaddehosur\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dave Thaler, Poorna Gaddehosur\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/\"},\"author\":[{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/dave-thaler\/\",\"@type\":\"Person\",\"@name\":\"Dave Thaler\"},{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/poorna-gaddehosur\/\",\"@type\":\"Person\",\"@name\":\"Poorna Gaddehosur\"}],\"headline\":\"Making eBPF work on Windows\",\"datePublished\":\"2021-05-10T16:00:47+00:00\",\"dateModified\":\"2025-08-26T21:12:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/\"},\"wordCount\":665,\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.webp\",\"keywords\":[\"Windows\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/\",\"name\":\"Making eBPF work on Windows | Microsoft Open Source Blog\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.webp\",\"datePublished\":\"2021-05-10T16:00:47+00:00\",\"dateModified\":\"2025-08-26T21:12:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#primaryimage\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.webp\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.webp\",\"width\":1170,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/opensource.microsoft.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Making eBPF work on Windows\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Making eBPF work on Windows | Microsoft Open Source Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/","og_locale":"en_US","og_type":"article","og_title":"Making eBPF work on Windows | Microsoft Open Source Blog","og_description":"eBPF is a well-known but revolutionary technology\u2014providing programmability, extensibility, and agility. eBPF has been applied to use cases such as denial-of-service protection and observability. Over time, a significant ecosystem of tools, products, and experience has been built up around eBPF.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2021-05-10T16:00:47+00:00","article_modified_time":"2025-08-26T21:12:05+00:00","og_image":[{"width":1170,"height":640,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.png","type":"image\/png"}],"author":"Dave Thaler, Poorna Gaddehosur","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Dave Thaler, Poorna Gaddehosur","Est. reading time":"3 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/dave-thaler\/","@type":"Person","@name":"Dave Thaler"},{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/poorna-gaddehosur\/","@type":"Person","@name":"Poorna Gaddehosur"}],"headline":"Making eBPF work on Windows","datePublished":"2021-05-10T16:00:47+00:00","dateModified":"2025-08-26T21:12:05+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/"},"wordCount":665,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.webp","keywords":["Windows"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/","url":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/","name":"Making eBPF work on Windows | Microsoft Open Source Blog","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.webp","datePublished":"2021-05-10T16:00:47+00:00","dateModified":"2025-08-26T21:12:05+00:00","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.webp","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/Hybrid-meeting-800x533-1.webp","width":1170,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/05\/10\/making-ebpf-work-on-windows\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Making eBPF work on Windows"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/85859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/5562"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=85859"}],"version-history":[{"count":2,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/85859\/revisions"}],"predecessor-version":[{"id":97578,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/85859\/revisions\/97578"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/95476"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=85859"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=85859"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=85859"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=85859"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=85859"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=85859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}