Files
nexus/sreweekly/articles/446/06-why-the-future-of-the-io-domain-extension-is-uncertain.html
2026-09-12 17:23:01 +08:00

465 lines
56 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en" data-astro-cid-bvzihdzo> <head><!-- Global Metadata --><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><meta name="generator" content="Astro v4.16.18"><!-- No-flash theme init --><script>
(function () {
try {
var stored = localStorage.getItem('tds-theme');
var theme = stored || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
document.documentElement.setAttribute('data-theme', theme);
} catch (e) {
document.documentElement.setAttribute('data-theme', 'dark');
}
})();
</script><!-- Marks scroll-reveal as available before first paint, so the hidden
starting state in global.css only ever applies when JS can actually
reveal it — no-JS visitors get normal, always-visible content. --><script>document.documentElement.classList.add('js-reveal');</script><!-- Fonts --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet"><!-- Canonical URL --><link rel="canonical" href="https://thedeveloperstory.com/2024/10/03/why-the-future-of-the-io-domain-extension-is-uncertain/"><!-- RSS --><link rel="alternate" type="application/rss+xml" title="The Developer Story RSS Feed" href="/rss.xml"><!-- Pagination --><!-- Primary Meta Tags --><title>Why the Future of the .io Domain Extension is Uncertain</title><meta name="title" content="Why the Future of the .io Domain Extension is Uncertain"><meta name="description" content="Introduction The dispute over the .io domain is a complex issue that intertwines historical injustices, geopolitical tensions, technological innovation, and economic interests. At its core, this conflict revolves around the ownership and control of a seemingly simple internet domain extension. However, when we delve deeper, we uncover a narrative that spans decades, involves multiple nations, […]"><!-- Open Graph / Facebook --><meta property="og:type" content="article"><meta property="og:site_name" content="The Developer Story"><meta property="og:url" content="https://thedeveloperstory.com/2024/10/03/why-the-future-of-the-io-domain-extension-is-uncertain/"><meta property="og:title" content="Why the Future of the .io Domain Extension is Uncertain"><meta property="og:description" content="Introduction The dispute over the .io domain is a complex issue that intertwines historical injustices, geopolitical tensions, technological innovation, and economic interests. At its core, this conflict revolves around the ownership and control of a seemingly simple internet domain extension. However, when we delve deeper, we uncover a narrative that spans decades, involves multiple nations, […]"><meta property="og:image" content="https://thedeveloperstory.com/blog-images/wp-image-24.jpg"><meta property="og:image:alt" content="Why the Future of the .io Domain Extension is Uncertain"><meta property="article:published_time" content="2024-10-03T00:00:00.000Z"><meta property="article:modified_time" content="2024-10-03T00:00:00.000Z"><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://thedeveloperstory.com/2024/10/03/why-the-future-of-the-io-domain-extension-is-uncertain/"><meta property="twitter:title" content="Why the Future of the .io Domain Extension is Uncertain"><meta property="twitter:description" content="Introduction The dispute over the .io domain is a complex issue that intertwines historical injustices, geopolitical tensions, technological innovation, and economic interests. At its core, this conflict revolves around the ownership and control of a seemingly simple internet domain extension. However, when we delve deeper, we uncover a narrative that spans decades, involves multiple nations, […]"><meta property="twitter:image" content="https://thedeveloperstory.com/blog-images/wp-image-24.jpg"><meta property="twitter:image:alt" content="Why the Future of the .io Domain Extension is Uncertain"><!-- Structured Data --><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","name":"The Developer Story","url":"https://thedeveloperstory.com/"},{"@type":"Person","name":"Vivek Naskar","url":"https://thedeveloperstory.com/about-me/","image":"https://thedeveloperstory.com/author.jpg","sameAs":["https://x.com/vivek_naskar","https://github.com/viveknaskar","https://www.youtube.com/@thedeveloperstory","https://viveknaskar.medium.com/"]}]}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","headline":"Why the Future of the .io Domain Extension is Uncertain","description":"Introduction The dispute over the .io domain is a complex issue that intertwines historical injustices, geopolitical tensions, technological innovation, and economic interests. At its core, this conflict revolves around the ownership and control of a seemingly simple internet domain extension. However, when we delve deeper, we uncover a narrative that spans decades, involves multiple nations, […]","keywords":"Stories","image":"https://thedeveloperstory.com/blog-images/wp-image-24.jpg","datePublished":"2024-10-03T00:00:00.000Z","dateModified":"2024-10-03T00:00:00.000Z","mainEntityOfPage":{"@type":"WebPage","@id":"https://thedeveloperstory.com/2024/10/03/why-the-future-of-the-io-domain-extension-is-uncertain/"},"author":{"@type":"Person","name":"Vivek Naskar","url":"https://thedeveloperstory.com/about-me/"},"publisher":{"@type":"Person","name":"Vivek Naskar","url":"https://thedeveloperstory.com/about-me/"}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://thedeveloperstory.com/"},{"@type":"ListItem","position":2,"name":"Stories","item":"https://thedeveloperstory.com/category/stories/"},{"@type":"ListItem","position":3,"name":"Why the Future of the .io Domain Extension is Uncertain","item":"https://thedeveloperstory.com/2024/10/03/why-the-future-of-the-io-domain-extension-is-uncertain/"}]}</script><!-- Google Analytics now loads as a Zaraz-managed tool (consent-gated via the
"analytics" purpose), so it's no longer hardcoded here. --><!-- Google Consent Mode defaults — denied until Zaraz's CMP grants the
"marketing" purpose. Must run before adsbygoogle.js loads; Zaraz's own
consent gating only covers tools configured inside Zaraz, not this
hardcoded AdSense script, so Consent Mode is wired independently. --><script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
window.gtag = gtag;
gtag('consent', 'default', {
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
analytics_storage: 'denied',
});
</script><!-- Google AdSense --><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7256293357558112" crossorigin="anonymous"></script><!-- Bridge Zaraz's "marketing" consent purpose to Google Consent Mode.
Zaraz has no documented "ready" event (per Cloudflare's own community
threads), so this polls for window.zaraz instead of guessing one. --><script>
(function () {
function syncConsent() {
var granted = !!(zaraz.consent.getAll().marketing);
gtag('consent', 'update', {
ad_storage: granted ? 'granted' : 'denied',
ad_user_data: granted ? 'granted' : 'denied',
ad_personalization: granted ? 'granted' : 'denied',
});
}
var tries = 0;
var poll = setInterval(function () {
if (window.zaraz && window.zaraz.consent) {
clearInterval(poll);
syncConsent();
zaraz.consent.addEventListener('consentChanged', syncConsent);
} else if (++tries > 100) {
clearInterval(poll); // Zaraz not enabled on this deploy yet.
}
}, 100);
})();
</script><!-- Live view counter (reads counts for any [data-views-slug] on the page; increments once per visit on an article) --><script>
document.addEventListener('DOMContentLoaded', function () {
var els = Array.prototype.slice.call(document.querySelectorAll('[data-views-slug]'));
if (!els.length) return;
function fmt(n) { n = n || 0; return n >= 1000 ? (n / 1000).toFixed(n % 1000 >= 100 ? 1 : 0).replace(/\.0$/, '') + 'k' : String(n); }
function paint(slug, n) {
els.forEach(function (e) {
if (e.getAttribute('data-views-slug') !== slug) return;
var num = e.querySelector('.views-num');
if (num) num.textContent = fmt(n);
e.removeAttribute('hidden');
});
}
var slugs = els.map(function (e) { return e.getAttribute('data-views-slug'); })
.filter(function (v, i, a) { return v && a.indexOf(v) === i; });
fetch('/api/views?slugs=' + encodeURIComponent(slugs.join(',')))
.then(function (r) { return r.json(); })
.then(function (data) { slugs.forEach(function (s) { paint(s, data[s]); }); })
.catch(function () {});
var article = document.querySelector('[data-post-slug]');
if (article) {
var slug = article.getAttribute('data-post-slug');
var key = 'tds-viewed:' + slug, now = Date.now(), last = 0;
try { last = +localStorage.getItem(key) || 0; } catch (e) {}
if (now - last > 6 * 3600 * 1000) {
try { localStorage.setItem(key, String(now)); } catch (e) {}
fetch('/api/views/' + encodeURIComponent(slug), { method: 'POST' })
.then(function (r) { return r.json(); })
.then(function (d) { if (d && typeof d.count === 'number') paint(slug, d.count); })
.catch(function () {});
}
}
});
</script><link rel="stylesheet" href="/_astro/_slug_.CyU_ITae.css">
<link rel="stylesheet" href="/_astro/_slug_.CLaBPtro.css">
<style>ins.tds-ad{min-height:0!important}ins.tds-ad[data-ad-status=unfilled]{display:none!important}
.pill[data-astro-cid-wsafccrt]{display:inline-block;background:color-mix(in srgb,var(--pill) 15%,transparent);color:var(--pill);padding:3px 10px;border-radius:20px;font-family:var(--font-body);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;text-decoration:none;transition:var(--transition)}.pill[data-astro-cid-wsafccrt]:hover{background:color-mix(in srgb,var(--pill) 28%,transparent)}.views[data-astro-cid-qpoqrdwf]{display:inline-flex;align-items:center;gap:5px}.views[data-astro-cid-qpoqrdwf] .sep[data-astro-cid-qpoqrdwf]{opacity:.4;margin-right:3px}.views[data-astro-cid-qpoqrdwf] svg[data-astro-cid-qpoqrdwf]{opacity:.85}
.card[data-astro-cid-iyiqi2so]{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;display:flex;flex-direction:column;transition:var(--transition)}.card[data-astro-cid-iyiqi2so]:hover{transform:translateY(-3px);box-shadow:0 8px 30px #00000026}.thumb-link[data-astro-cid-iyiqi2so]{display:block}.thumb[data-astro-cid-iyiqi2so]{width:100%;aspect-ratio:16/10;object-fit:cover;display:block}.body[data-astro-cid-iyiqi2so]{padding:20px;display:flex;flex-direction:column;gap:10px;flex:1}h3[data-astro-cid-iyiqi2so]{font-family:var(--font-heading);font-size:17px;font-weight:600;line-height:1.35;letter-spacing:-.02em;margin:0;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}h3[data-astro-cid-iyiqi2so] a[data-astro-cid-iyiqi2so]{color:var(--text);text-decoration:none}.card[data-astro-cid-iyiqi2so]:hover h3[data-astro-cid-iyiqi2so] a[data-astro-cid-iyiqi2so]{color:var(--accent)}.excerpt[data-astro-cid-iyiqi2so]{font-size:14px;line-height:1.6;color:var(--text-muted);margin:0;flex:1;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.meta[data-astro-cid-iyiqi2so]{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-faint);padding-top:8px;border-top:1px solid var(--border)}.dot[data-astro-cid-iyiqi2so]{opacity:.4}
</style></head> <body data-astro-cid-bvzihdzo> <a class="skip-link" href="#main-content" data-astro-cid-3ef6ksr2>Skip to content</a> <div id="page-progress" data-astro-cid-3ef6ksr2></div> <header id="site-header" data-astro-cid-3ef6ksr2> <div class="inner" data-astro-cid-3ef6ksr2> <a class="logo" href="/" aria-label="The Developer Story" data-astro-cid-3ef6ksr2> <span class="badge" aria-hidden="true" data-astro-cid-3ef6ksr2> <svg viewBox="0 0 64 64" width="34" height="34" data-astro-cid-3ef6ksr2> <rect width="64" height="64" rx="14" fill="#0A0A0C" data-astro-cid-3ef6ksr2></rect> <g transform="translate(-5,0)" data-astro-cid-3ef6ksr2> <path d="M22 20 L35 32 L22 44" fill="none" stroke="#E8944E" stroke-width="5.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2></path> <rect x="39" y="38.75" width="13" height="5.5" rx="2.75" fill="#E8944E" data-astro-cid-3ef6ksr2></rect> </g> </svg> </span> <span class="word" data-astro-cid-3ef6ksr2>the developer story</span> </a> <nav class="nav" id="site-nav" data-astro-cid-3ef6ksr2> <a href="/" data-astro-cid-3ef6ksr2>Home</a><a href="/category/" data-astro-cid-3ef6ksr2>Categories</a><a href="/archive/" data-astro-cid-3ef6ksr2>Archive</a><a href="/accessories/" data-astro-cid-3ef6ksr2>Accessories</a><a href="/collections/" data-astro-cid-3ef6ksr2>Collections</a><a href="/projects/" data-astro-cid-3ef6ksr2>Projects</a><a href="/about-me/" data-astro-cid-3ef6ksr2>About</a> </nav> <div class="actions" data-astro-cid-3ef6ksr2> <button type="button" class="icon-btn" data-search-trigger aria-label="Search (Ctrl/Cmd K)" data-astro-cid-3ef6ksr2> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-3ef6ksr2><circle cx="11" cy="11" r="8" data-astro-cid-3ef6ksr2></circle><path d="M21 21l-4.35-4.35" data-astro-cid-3ef6ksr2></path></svg> </button> <button type="button" class="icon-btn" id="theme-toggle" aria-label="Toggle theme" data-astro-cid-3ef6ksr2> <svg class="sun" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-3ef6ksr2><circle cx="12" cy="12" r="5" data-astro-cid-3ef6ksr2></circle><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42" data-astro-cid-3ef6ksr2></path></svg> <svg class="moon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-3ef6ksr2><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z" data-astro-cid-3ef6ksr2></path></svg> </button> <button type="button" class="icon-btn menu-toggle" id="menu-toggle" aria-label="Menu" aria-controls="site-nav" aria-expanded="false" data-astro-cid-3ef6ksr2> <svg class="bars" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-3ef6ksr2><path d="M3 6h18M3 12h18M3 18h18" data-astro-cid-3ef6ksr2></path></svg> <svg class="close" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-3ef6ksr2><path d="M18 6L6 18M6 6l12 12" data-astro-cid-3ef6ksr2></path></svg> </button> </div> </div> </header> <div id="tds-search" class="overlay" hidden data-astro-cid-otpdt6jm> <div class="panel" role="dialog" aria-modal="true" aria-label="Search articles" data-astro-cid-otpdt6jm> <div class="bar" data-astro-cid-otpdt6jm> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-otpdt6jm><circle cx="11" cy="11" r="8" data-astro-cid-otpdt6jm></circle><path d="M21 21l-4.35-4.35" data-astro-cid-otpdt6jm></path></svg> <input id="tds-search-input" type="text" placeholder="Search articles..." aria-label="Search articles" autocomplete="off" data-astro-cid-otpdt6jm> <kbd data-astro-cid-otpdt6jm>ESC</kbd> </div> <div id="tds-search-results" class="results" data-astro-cid-otpdt6jm></div> </div> </div> <script>
(function () {
var overlay = document.getElementById('tds-search');
var input = document.getElementById('tds-search-input');
var results = document.getElementById('tds-search-results');
var data = null;
function open() {
overlay.hidden = false;
document.body.style.overflow = 'hidden';
input.focus();
if (!data) {
// Re-render once the index arrives, in case the user typed before it loaded.
fetch('/search-index.json').then(function (r) { return r.json(); }).then(function (d) { data = d; render(); });
}
}
function close() { overlay.hidden = true; document.body.style.overflow = ''; input.value = ''; results.innerHTML = ''; }
function render() {
var q = input.value.trim().toLowerCase();
if (q.length < 2 || !data) { results.innerHTML = ''; return; }
var matches = data.filter(function (a) {
return a.title.toLowerCase().indexOf(q) !== -1 || a.excerpt.toLowerCase().indexOf(q) !== -1;
}).slice(0, 12);
if (matches.length === 0) {
results.innerHTML = '<div class="empty">No articles found</div>';
return;
}
results.innerHTML = matches.map(function (a) {
return '<a class="res" href="' + a.url + '"><div class="t"></div><div class="m"></div></a>';
}).join('');
var rows = results.querySelectorAll('.res');
matches.forEach(function (a, i) {
rows[i].querySelector('.t').textContent = a.title;
rows[i].querySelector('.m').textContent = a.category + ' · ' + a.date;
});
}
window.addEventListener('tds-open-search', open);
input.addEventListener('input', render);
overlay.addEventListener('click', function (e) { if (e.target === overlay) close(); });
window.addEventListener('keydown', function (e) { if (e.key === 'Escape' && !overlay.hidden) close(); });
})();
</script> <script>
(function () {
var header = document.getElementById('site-header');
var onScroll = function () { header.classList.toggle('scrolled', window.scrollY > 20); };
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
// --- Theme-toggle sound (ported from viveknaskar-portfolio: Web Audio click.wav) ---
var audioCtx = null;
var clickBuffer = null;
function getAudioContext() {
if (!audioCtx) {
var AC = window.AudioContext || window.webkitAudioContext;
if (AC) audioCtx = new AC();
}
return audioCtx;
}
function loadClickSound() {
if (clickBuffer) return Promise.resolve(clickBuffer);
var ctx = getAudioContext();
if (!ctx) return Promise.reject();
return fetch('/audio/click.wav')
.then(function (r) { return r.arrayBuffer(); })
.then(function (buf) { return ctx.decodeAudioData(buf); })
.then(function (decoded) { clickBuffer = decoded; return decoded; });
}
function playToggleSound() {
// Buffer is preloaded on first interaction, so this resolves synchronously
// on click and the sound fires without a fetch/decode delay.
loadClickSound().then(function (buffer) {
var ctx = getAudioContext();
if (ctx.state === 'suspended') ctx.resume();
var source = ctx.createBufferSource();
var gain = ctx.createGain();
source.buffer = buffer;
gain.gain.value = 0.5;
source.connect(gain);
gain.connect(ctx.destination);
source.start(0);
}).catch(function () { /* silently fail if audio is blocked */ });
}
// Warm up the audio pipeline on the first user gesture so the click.wav is
// already fetched, decoded and the context resumed before the toggle is pressed.
function warmUpClickSound() {
var ctx = getAudioContext();
if (ctx && ctx.state === 'suspended') ctx.resume();
loadClickSound().catch(function () {});
}
window.addEventListener('pointerdown', warmUpClickSound, { once: true });
var themeTransitionTimer;
function withThemeTransition(fn) {
var root = document.documentElement;
root.classList.add('theme-transition');
fn();
clearTimeout(themeTransitionTimer);
themeTransitionTimer = setTimeout(function () { root.classList.remove('theme-transition'); }, 400);
}
var toggle = document.getElementById('theme-toggle');
toggle.addEventListener('click', function () {
playToggleSound();
withThemeTransition(function () {
var cur = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';
var next = cur === 'dark' ? 'light' : 'dark';
document.documentElement.setAttribute('data-theme', next);
try { localStorage.setItem('tds-theme', next); } catch (e) {}
});
});
// --- Mobile menu ---
var menuToggle = document.getElementById('menu-toggle');
function closeMenu() {
header.classList.remove('menu-open');
menuToggle.setAttribute('aria-expanded', 'false');
}
menuToggle.addEventListener('click', function (e) {
e.stopPropagation();
var open = header.classList.toggle('menu-open');
menuToggle.setAttribute('aria-expanded', open ? 'true' : 'false');
});
document.getElementById('site-nav').addEventListener('click', function (e) {
if (e.target.tagName === 'A') closeMenu();
});
document.addEventListener('click', function (e) {
if (header.classList.contains('menu-open') && !header.contains(e.target)) closeMenu();
});
window.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeMenu(); });
function openSearch() { window.dispatchEvent(new CustomEvent('tds-open-search')); }
document.querySelectorAll('[data-search-trigger]').forEach(function (b) { b.addEventListener('click', openSearch); });
window.addEventListener('keydown', function (e) {
if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') { e.preventDefault(); openSearch(); }
});
// --- Top progress bar on page navigation ---
// This is a static multi-page site, not an SPA: there is no "finish"
// event to hook, because the browser destroys this whole page (and this
// script) the moment the next one is ready to swap in. So the bar just
// needs to start climbing on click and hand off — the old page's bar
// is what's on screen for however long the actual navigation takes.
var bar = document.getElementById('page-progress');
var progressTimer;
function startProgress() {
bar.style.opacity = '1';
bar.style.width = '20%';
clearInterval(progressTimer);
progressTimer = setInterval(function () {
var w = parseFloat(bar.style.width) || 0;
if (w < 90) bar.style.width = (w + (90 - w) * 0.1).toFixed(1) + '%';
}, 200);
}
document.addEventListener('click', function (e) {
if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
var a = e.target.closest('a');
if (!a || !a.href || a.target === '_blank' || a.hasAttribute('download')) return;
var url;
try { url = new URL(a.href, location.href); } catch (err) { return; }
if (url.origin !== location.origin) return;
if (url.pathname === location.pathname && url.search === location.search && url.hash) return;
startProgress();
});
// bfcache restores (back/forward) skip the load event this resets on,
// so make sure a stale bar never lingers after a back-navigation.
window.addEventListener('pageshow', function () {
clearInterval(progressTimer);
bar.style.transition = 'none';
bar.style.width = '0';
bar.style.opacity = '0';
requestAnimationFrame(function () { bar.style.transition = ''; });
});
})();
</script> <div class="progress" data-astro-cid-bvzihdzo><div class="bar" id="read-bar" data-astro-cid-bvzihdzo></div></div> <div id="main-content" class="head-wrap" data-astro-cid-bvzihdzo> <nav class="crumb" data-astro-cid-bvzihdzo> <a href="/" data-astro-cid-bvzihdzo>Home</a><span data-astro-cid-bvzihdzo>/</span> <a href="/category/stories/" data-astro-cid-bvzihdzo>Stories</a><span data-astro-cid-bvzihdzo>/</span> <span class="muted" data-astro-cid-bvzihdzo>Article</span> </nav> <a class="pill" href="/category/stories/" style="--pill: #D4874D;" data-astro-cid-wsafccrt>Stories</a> <h1 data-astro-cid-bvzihdzo>Why the Future of the .io Domain Extension is Uncertain</h1> <div class="author-row" data-astro-cid-bvzihdzo> <img class="avatar" src="/author.jpg" alt="Vivek Naskar" width="40" height="40" data-astro-cid-bvzihdzo> <div data-astro-cid-bvzihdzo> <div class="aname" data-astro-cid-bvzihdzo>Vivek Naskar</div> <div class="ameta" data-astro-cid-bvzihdzo><time datetime="2024-10-03T00:00:00.000Z"> Oct 3, 2024 </time> · 9 min read <span class="views" data-views-slug="why-the-future-of-the-io-domain-extension-is-uncertain" hidden data-astro-cid-qpoqrdwf> <span class="sep" aria-hidden="true" data-astro-cid-qpoqrdwf>·</span> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-qpoqrdwf> <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" data-astro-cid-qpoqrdwf></path><circle cx="12" cy="12" r="3" data-astro-cid-qpoqrdwf></circle> </svg> <span class="views-num" data-astro-cid-qpoqrdwf>0</span> </span> </div> </div> </div> <img class="hero" src="/blog-images/wp-image-24.jpg" alt="Why the Future of the .io Domain Extension is Uncertain" width="1100" height="471" data-astro-cid-bvzihdzo> </div> <div class="body-wrap" data-astro-cid-bvzihdzo> <div class="main-col" data-astro-cid-bvzihdzo> <div class="share-bar" data-astro-cid-bvzihdzo><div class="share" data-share-title="Why the Future of the .io Domain Extension is Uncertain" data-astro-cid-luj3ckct> <a class="sbtn x" data-share="x" href="#" aria-label="Share on X" title="Share on X" data-astro-cid-luj3ckct> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" data-astro-cid-luj3ckct><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" data-astro-cid-luj3ckct></path></svg> </a> <a class="sbtn li" data-share="linkedin" href="#" aria-label="Share on LinkedIn" title="Share on LinkedIn" data-astro-cid-luj3ckct> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" data-astro-cid-luj3ckct><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" data-astro-cid-luj3ckct></path></svg> </a> <button class="sbtn copy" data-share="copy" aria-label="Copy link" title="Copy link" data-astro-cid-luj3ckct> <svg class="ic-link" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-luj3ckct><path d="M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71" data-astro-cid-luj3ckct></path><path d="M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71" data-astro-cid-luj3ckct></path></svg> <svg class="ic-check" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" hidden data-astro-cid-luj3ckct><path d="M20 6L9 17l-5-5" data-astro-cid-luj3ckct></path></svg> </button> </div> <script>
(function () {
document.querySelectorAll('.share').forEach(function (root) {
var title = root.getAttribute('data-share-title') || document.title;
var url = window.location.href;
var x = root.querySelector('[data-share="x"]');
var li = root.querySelector('[data-share="linkedin"]');
var copy = root.querySelector('[data-share="copy"]');
if (x) x.href = 'https://twitter.com/intent/tweet?text=' + encodeURIComponent(title) + '&url=' + encodeURIComponent(url);
if (li) li.href = 'https://www.linkedin.com/sharing/share-offsite/?url=' + encodeURIComponent(url);
if (copy) copy.addEventListener('click', function () {
navigator.clipboard.writeText(url);
var link = copy.querySelector('.ic-link'), check = copy.querySelector('.ic-check');
link.hidden = true; check.hidden = false;
setTimeout(function () { link.hidden = false; check.hidden = true; }, 2000);
});
});
})();
</script></div> <div id="article-body" class="prose" data-post-slug="why-the-future-of-the-io-domain-extension-is-uncertain" data-astro-cid-bvzihdzo> <h3 id="introduction">Introduction</h3>
<p>The dispute over the .io domain is a complex issue that intertwines historical injustices, geopolitical tensions, technological innovation, and economic interests. At its core, this conflict revolves around the ownership and control of a seemingly simple internet domain extension. However, when we delve deeper, we uncover a narrative that spans decades, involves multiple nations, and affects the lives of an entire indigenous population.</p>
<p>The .io domain, originally assigned to the British Indian Ocean Territory (BIOT), has become unexpectedly valuable in the digital age. Its popularity among tech startups and its significant revenue generation have brought renewed attention to the long-standing issues surrounding the Chagos Archipelago and its original inhabitants, the Chagossians. To fully understand the .io domain dispute, we must examine its historical context, the various stakeholders involved, and the broader implications for international law, human rights, and the global technology sector.</p>
<h3 id="the-creation-of-biot-and-the-expulsion-of-the-chagossians">The Creation of BIOT and the Expulsion of the Chagossians</h3>
<p>The roots of this conflict trace back to the mid-1960s, a period marked by decolonization and Cold War tensions. In 1965, three years before Mauritius gained independence from British rule, the UK government made a controversial decision. It separated the Chagos Archipelago from Mauritius to create the British Indian Ocean Territory (BIOT).</p>
<p>This decision was primarily motivated by strategic military considerations. The United States, seeking a military presence in the Indian Ocean, had approached the UK about establishing a base in the region. The creation of BIOT facilitated this plan, leading to the establishment of a significant U.S. military base on Diego Garcia, the largest island in the Chagos Archipelago.</p>
<p>However, the creation of BIOT and the subsequent military plans had devastating consequences for the islands’ indigenous population. Between 1967 and 1973, the entire population of the Chagos Archipelago—approximately 1,500 to 2,000 people—was forcibly removed from their homeland. The Chagossians, who had inhabited these islands for generations, were relocated primarily to Mauritius and Seychelles, often in conditions of extreme poverty.</p>
<p>This forced expulsion has been widely condemned as a severe human rights violation. The Chagossians, abruptly uprooted from their way of life, faced numerous challenges in their new environments, including unemployment, social marginalization, and the psychological trauma of displacement.</p>
<h3 id="the-io-domain-from-obscurity-to-controversy">The .io Domain: From Obscurity to Controversy</h3>
<p>Fast forward to the digital age, and an unexpected element enters this already complex situation: the .io domain. As part of the International Organization for Standardization’s country code top-level domain (ccTLD) system, .io was assigned to the British Indian Ocean Territory in 1997.</p>
<p>Initially, the .io domain held little significance beyond its official designation. However, as the internet evolved and the tech industry boomed, .io gained popularity for reasons entirely unrelated to its geographical assignment. In computer science, “I/O” stands for “input/output,” a fundamental concept in programming. This coincidental connection made .io increasingly attractive to tech startups and digital businesses.</p>
<p>The rising popularity of .io domains led to a significant increase in their economic value. Reports suggest that the domain generates approximately $7 million in annual revenue. However, this newfound wealth has become a point of contention, particularly given the historical context of the Chagos Archipelago and its displaced inhabitants.</p>
<h3 id="key-stakeholders-and-their-positions">Key Stakeholders and Their Positions</h3>
<h4 id="the-chagossians">The Chagossians</h4>
<p>The Chagossian people, the indigenous inhabitants of the Chagos Archipelago, are at the heart of this dispute. Since their forced removal, they have been engaged in a long-standing legal and political battle for their rights. Their struggle has included:</p>
<ol>
<li>Campaigning for the right to return to their homeland</li>
<li>Seeking compensation for their displacement and subsequent hardships</li>
<li>Fighting for recognition of their rights as the archipelago’s indigenous people</li>
</ol>
<p>In recent years, the Chagossians have extended their claims to include the .io domain. They argue that as the rightful inhabitants of the territory to which the domain is assigned, they should benefit from the revenue it generates. This claim is part of a broader argument for justice and restitution for the historical wrongs they have suffered.</p>
<p>In July 2021, representatives of the Chagossian community filed a formal complaint regarding the management of the .io domain. They are seeking a share of its revenues and assert their rights as the domain’s rightful owners. This move has added a new dimension to their ongoing struggle for recognition and compensation.</p>
<h4 id="the-united-kingdom">The United Kingdom</h4>
<p>The UK government maintains control over BIOT and, by extension, the .io domain. Their position is complex and has evolved over time:</p>
<ol>
<li>Historical stance: The UK has long justified the creation of BIOT and the removal of the Chagossians on grounds of military necessity and national security.</li>
<li>Recent developments: In recent years, there has been some softening of the UK’s position. In 2016, the UK government acknowledged the “shameful” treatment of the Chagossians. However, it has stopped short of allowing full resettlement, citing practical and economic challenges.</li>
<li>Domain management: The UK government has delegated the management of the .io domain to Internet Computer Bureau Ltd (ICB), a private company. This arrangement has faced criticism for its lack of transparency, particularly regarding the distribution of profits.</li>
<li>International pressure: The UK faces increasing international pressure to resolve the BIOT issue, including the question of the .io domain’s ownership and revenue distribution.</li>
</ol>
<h4 id="mauritius">Mauritius</h4>
<p>The government of Mauritius plays a significant role in this dispute:</p>
<ol>
<li>Territorial claim: Mauritius asserts that the Chagos Archipelago is part of its territory, arguing that the 1965 separation was illegal under international law.</li>
<li>International support: Mauritius has gained substantial international support for its position, including a 2019 advisory opinion from the International Court of Justice (ICJ) suggesting that the UK should end its administration of the Chagos Archipelago.</li>
<li>.io domain interest: As part of its broader claim to the Chagos Archipelago, Mauritius has expressed interest in controlling the .io domain. This could potentially be part of future negotiations with the UK government.</li>
</ol>
<h4 id="the-tech-industry">The Tech Industry</h4>
<p>The global technology sector has become an inadvertent stakeholder in this dispute:</p>
<ol>
<li>Widespread use: Many tech startups and established companies use .io domains for their websites and online services.</li>
<li>Branding concerns: There are concerns within the tech industry about the potential retirement or significant alteration of the .io domain if control over BIOT changes hands.</li>
<li>Ethical considerations: Some companies using .io domains have faced questions about the ethical implications of using a domain tied to a controversial territorial dispute.</li>
</ol>
<h3 id="legal-and-geopolitical-complexities">Legal and Geopolitical Complexities</h3>
<p>The .io domain dispute is intertwined with broader legal and geopolitical issues.</p>
<p>In February 2019, the International Court of Justice issued an advisory opinion stating that the UK’s continued administration of the Chagos Archipelago is unlawful. The court advised that the UK should end its administration of the territory as rapidly as possible, allowing Mauritius to complete the decolonization of its territory.</p>
<p>While ICJ advisory opinions are not legally binding, they carry significant moral and political weight. This ruling has implications for the future of BIOT and, by extension, the .io domain.</p>
<p>Following the ICJ opinion, the UN General Assembly passed a resolution in May 2019 demanding that the UK withdraw from the Chagos Archipelago within six months. This resolution, while also non-binding, further increased international pressure on the UK.</p>
<p>The UK and Mauritius have engaged in negotiations regarding the future of the Chagos Archipelago. These discussions could potentially include the fate of the .io domain, although no concrete agreements have been reached as of now.</p>
<p>The forced displacement of the Chagossians has been recognized as a significant human rights violation. Various international human rights organizations have advocated for the Chagossians’ right to return and for compensation for their suffering.</p>
<h3 id="economic-implications">Economic Implications</h3>
<p>The economic aspects of the .io domain dispute are significant. The .io domain generates substantial revenue, estimated at around $7 million annually. This revenue stream is currently managed by ICB under the authority of the UK government.</p>
<p>Many businesses, particularly in the tech sector, have built their online presence around .io domains. Any changes to the domain’s status could potentially disrupt these businesses, affecting their branding, search engine optimization, and overall online presence.</p>
<p>If the Chagossians’ claim to the .io domain revenue is recognized, it could provide a significant source of compensation for the community. This could potentially help address some of the economic hardships faced by the displaced population.</p>
<h3 id="current-developments-and-future-prospects">Current Developments and Future Prospects</h3>
<p>The .io domain dispute continues to evolve.</p>
<p>The Chagossians continue to pursue legal avenues to assert their rights, including their claim to the .io domain revenue. These legal challenges are ongoing in various jurisdictions. Discussions between the UK, Mauritius, and representatives of the Chagossian community are ongoing. The future of BIOT and the .io domain may be determined through these diplomatic channels.</p>
<p>As the internet continues to evolve, there may be technological solutions or alternatives that could impact the .io domain dispute. For instance, the development of new top-level domains could potentially reduce the economic significance of .io. There is growing public awareness of the issues surrounding the .io domain, particularly within the tech community. This increased attention could potentially influence future decisions regarding the domain’s management and revenue distribution.</p>
<h3 id="conclusion">Conclusion</h3>
<p>The .io domain dispute is a multifaceted issue that encapsulates themes of historical injustice, geopolitical tension, technological innovation, and economic interests. It serves as a poignant reminder of how decisions made in the past can have far-reaching and unexpected consequences in our interconnected world.</p>
<p>At its core, this dispute is about more than just a domain name. It’s about the rights of an indigenous people, the complexities of decolonization, the responsibilities of nations in the face of historical wrongs, and the unforeseen impacts of technological change.</p>
<p>As we move forward, resolving this dispute will require careful consideration of all stakeholders’ interests. It will likely necessitate innovative solutions that address historical injustices while also considering the practical realities of the digital age.</p>
<p>The resolution of the .io domain dispute could set important precedents for similar cases where historical, territorial, and technological issues intersect. It highlights the need for flexible and forward-thinking approaches to governance in an era where digital assets can have significant real-world implications.</p>
<p>Ultimately, the .io domain dispute serves as a compelling case study of how our digital present is inextricably linked to our historical past, and how finding just solutions requires us to bridge these two realms in thoughtful and equitable ways.</p>
<hr>
<p><em>If this article provided you with value, please support me by <a href="https://buymeacoffee.com/viveknaskar">buying me a coffee</a> — only if you can afford it. You can also <a href="https://x.com/vivek_naskar">connect with me on X</a>. Thank you!</em></p> </div> <div class="author-card" data-astro-cid-bvzihdzo> <img class="avatar lg" src="/author.jpg" alt="Vivek Naskar" width="56" height="56" loading="lazy" data-astro-cid-bvzihdzo> <div data-astro-cid-bvzihdzo> <div class="written" data-astro-cid-bvzihdzo>Written by Vivek Naskar</div> <p data-astro-cid-bvzihdzo>Software developer sharing experiences, learnings, and stories from the world of software development. Writing about Java, cloud, AI, and everything in between.</p> <a class="more" href="/about-me/" data-astro-cid-bvzihdzo>More about me →</a> </div> </div> <section class="related" data-astro-cid-bvzihdzo> <div class="sec-head" data-astro-cid-bvzihdzo><h2 data-astro-cid-bvzihdzo>Related Articles</h2><span class="rule" data-astro-cid-bvzihdzo></span></div> <div class="rel-grid" data-astro-cid-bvzihdzo> <article class="card" data-astro-cid-iyiqi2so> <a class="thumb-link" href="/2026/08/17/jeff-dean-and-three-google-veterans-leave-to-launch-discovery-loop-an-ai-research-startup/" data-astro-cid-iyiqi2so> <img class="thumb" src="/blog-images/nl-jeff-dean-and-three-google-veterans-leave-to-launch-discovery-loop-an-ai-research-startup.jpg" alt="Jeff Dean and Three Google Veterans Launch an AI Research Startup, Discovery Loop" width="400" height="250" loading="lazy" data-astro-cid-iyiqi2so> </a> <div class="body" data-astro-cid-iyiqi2so> <a class="pill" href="/category/stories/" style="--pill: #D4874D;" data-astro-cid-wsafccrt>Stories</a> <h3 data-astro-cid-iyiqi2so><a href="/2026/08/17/jeff-dean-and-three-google-veterans-leave-to-launch-discovery-loop-an-ai-research-startup/" data-astro-cid-iyiqi2so>Jeff Dean and Three Google Veterans Launch an AI Research Startup, Discovery Loop</a></h3> <p class="excerpt" data-astro-cid-iyiqi2so>On 5 August 2026, Jeff Dean, Google&#39;s chief scientist and its 30th employee, announced he was leaving to co-found Discovery Loop, a new AI research startup,…</p> <div class="meta" data-astro-cid-iyiqi2so> <time datetime="2026-08-17T00:00:00.000Z"> Aug 17, 2026 </time> <span class="dot" data-astro-cid-iyiqi2so>·</span> <span data-astro-cid-iyiqi2so>5 min read</span> <span class="views" data-views-slug="jeff-dean-and-three-google-veterans-leave-to-launch-discovery-loop-an-ai-research-startup" hidden data-astro-cid-qpoqrdwf> <span class="sep" aria-hidden="true" data-astro-cid-qpoqrdwf>·</span> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-qpoqrdwf> <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" data-astro-cid-qpoqrdwf></path><circle cx="12" cy="12" r="3" data-astro-cid-qpoqrdwf></circle> </svg> <span class="views-num" data-astro-cid-qpoqrdwf>0</span> </span> </div> </div> </article> <article class="card" data-astro-cid-iyiqi2so> <a class="thumb-link" href="/2026/07/18/kimi-k3-tops-arenas-frontend-coding-leaderboard-pushing-claude-and-gpt-5-6-behind-it/" data-astro-cid-iyiqi2so> <img class="thumb" src="/blog-images/nl-kimi-k3-tops-arenas-frontend-coding-leaderboard-pushing-claude-and-gpt-5-6-behind-it.jpg" alt="Kimi K3 Tops Arena's Frontend Coding Leaderboard, Pushing Claude and GPT-5.6 Behind It" width="400" height="250" loading="lazy" data-astro-cid-iyiqi2so> </a> <div class="body" data-astro-cid-iyiqi2so> <a class="pill" href="/category/stories/" style="--pill: #D4874D;" data-astro-cid-wsafccrt>Stories</a> <h3 data-astro-cid-iyiqi2so><a href="/2026/07/18/kimi-k3-tops-arenas-frontend-coding-leaderboard-pushing-claude-and-gpt-5-6-behind-it/" data-astro-cid-iyiqi2so>Kimi K3 Tops Arena&#39;s Frontend Coding Leaderboard, Pushing Claude and GPT-5.6 Behind It</a></h3> <p class="excerpt" data-astro-cid-iyiqi2so>On 16 July 2026, Moonshot AI released Kimi K3, a 2.8 trillion parameter open weight model, and within hours it had climbed to first place on Arena.ai&#39;s Frontend…</p> <div class="meta" data-astro-cid-iyiqi2so> <time datetime="2026-07-18T00:00:00.000Z"> Jul 18, 2026 </time> <span class="dot" data-astro-cid-iyiqi2so>·</span> <span data-astro-cid-iyiqi2so>5 min read</span> <span class="views" data-views-slug="kimi-k3-tops-arenas-frontend-coding-leaderboard-pushing-claude-and-gpt-5-6-behind-it" hidden data-astro-cid-qpoqrdwf> <span class="sep" aria-hidden="true" data-astro-cid-qpoqrdwf>·</span> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-qpoqrdwf> <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" data-astro-cid-qpoqrdwf></path><circle cx="12" cy="12" r="3" data-astro-cid-qpoqrdwf></circle> </svg> <span class="views-num" data-astro-cid-qpoqrdwf>0</span> </span> </div> </div> </article> <article class="card" data-astro-cid-iyiqi2so> <a class="thumb-link" href="/2026/07/15/how-1x-moved-the-robot-bottleneck-from-the-hands-to-the-ai-running-them/" data-astro-cid-iyiqi2so> <img class="thumb" src="/blog-images/nl-how-1x-moved-the-robot-bottleneck-from-the-hands-to-the-ai-running-them.jpg" alt="How 1X Moved the Robot Bottleneck From the Hands to the AI Running Them" width="400" height="250" loading="lazy" data-astro-cid-iyiqi2so> </a> <div class="body" data-astro-cid-iyiqi2so> <a class="pill" href="/category/stories/" style="--pill: #D4874D;" data-astro-cid-wsafccrt>Stories</a> <h3 data-astro-cid-iyiqi2so><a href="/2026/07/15/how-1x-moved-the-robot-bottleneck-from-the-hands-to-the-ai-running-them/" data-astro-cid-iyiqi2so>How 1X Moved the Robot Bottleneck From the Hands to the AI Running Them</a></h3> <p class="excerpt" data-astro-cid-iyiqi2so>On 9 July 2026 the Norwegian-American company 1X, founded in 2014, revealed a redesigned hand for NEO that carries 25 degrees of freedom, with 22 of them in the…</p> <div class="meta" data-astro-cid-iyiqi2so> <time datetime="2026-07-15T00:00:00.000Z"> Jul 15, 2026 </time> <span class="dot" data-astro-cid-iyiqi2so>·</span> <span data-astro-cid-iyiqi2so>6 min read</span> <span class="views" data-views-slug="how-1x-moved-the-robot-bottleneck-from-the-hands-to-the-ai-running-them" hidden data-astro-cid-qpoqrdwf> <span class="sep" aria-hidden="true" data-astro-cid-qpoqrdwf>·</span> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-qpoqrdwf> <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" data-astro-cid-qpoqrdwf></path><circle cx="12" cy="12" r="3" data-astro-cid-qpoqrdwf></circle> </svg> <span class="views-num" data-astro-cid-qpoqrdwf>0</span> </span> </div> </div> </article> </div> </section> </div> <aside class="side" data-astro-cid-bvzihdzo> <div class="widget toc" data-astro-cid-bvzihdzo> <h3 data-astro-cid-bvzihdzo>On This Page</h3> <div class="toc-list" data-astro-cid-bvzihdzo> <a class="sub" href="#introduction" data-astro-cid-bvzihdzo>Introduction</a><a class="sub" href="#the-creation-of-biot-and-the-expulsion-of-the-chagossians" data-astro-cid-bvzihdzo>The Creation of BIOT and the Expulsion of the Chagossians</a><a class="sub" href="#the-io-domain-from-obscurity-to-controversy" data-astro-cid-bvzihdzo>The .io Domain: From Obscurity to Controversy</a><a class="sub" href="#key-stakeholders-and-their-positions" data-astro-cid-bvzihdzo>Key Stakeholders and Their Positions</a><a class="sub" href="#legal-and-geopolitical-complexities" data-astro-cid-bvzihdzo>Legal and Geopolitical Complexities</a><a class="sub" href="#economic-implications" data-astro-cid-bvzihdzo>Economic Implications</a><a class="sub" href="#current-developments-and-future-prospects" data-astro-cid-bvzihdzo>Current Developments and Future Prospects</a><a class="sub" href="#conclusion" data-astro-cid-bvzihdzo>Conclusion</a> </div> </div> <ins class="adsbygoogle tds-ad" style="display:block" data-ad-client="ca-pub-7256293357558112" data-ad-format="auto" data-full-width-responsive="true"></ins> <script>(adsbygoogle = window.adsbygoogle || []).push({});</script> </aside> </div> <footer data-astro-cid-sz7xmlte> <div class="inner" data-astro-cid-sz7xmlte> <div class="brand" data-astro-cid-sz7xmlte> <span class="mark" aria-hidden="true" data-astro-cid-sz7xmlte> <svg viewBox="0 0 64 64" width="30" height="30" data-astro-cid-sz7xmlte> <g transform="translate(-5,0)" data-astro-cid-sz7xmlte> <path d="M22 20 L35 32 L22 44" fill="none" stroke="#E8944E" stroke-width="5.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-sz7xmlte></path> <rect x="39" y="38.75" width="13" height="5.5" rx="2.75" fill="#E8944E" data-astro-cid-sz7xmlte></rect> </g> </svg> </span> <div data-astro-cid-sz7xmlte> <div class="name" data-astro-cid-sz7xmlte>The Developer Story</div> <div class="desc" data-astro-cid-sz7xmlte>Sharing the journey and experiences during software development!</div> </div> </div> <nav class="links" aria-label="Footer" data-astro-cid-sz7xmlte> <a href="/archive/" data-astro-cid-sz7xmlte>Archive</a> <a href="/category/" data-astro-cid-sz7xmlte>Categories</a> <a href="/projects/" data-astro-cid-sz7xmlte>Projects</a> <a href="/about-me/" data-astro-cid-sz7xmlte>About</a> </nav> <div class="copy" data-astro-cid-sz7xmlte>© 2026 The Developer Story. All rights reserved.</div> </div> </footer> <button type="button" class="scroll-top" id="scroll-top" aria-label="Back to top" hidden data-astro-cid-sz7xmlte> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-sz7xmlte><path d="M12 19V5M5 12l7-7 7 7" data-astro-cid-sz7xmlte></path></svg> </button> <script>
(function () {
var btn = document.getElementById('scroll-top');
if (!btn) return;
var onScroll = function () { btn.hidden = window.scrollY < 600; };
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
btn.addEventListener('click', function () { window.scrollTo({ top: 0, behavior: 'smooth' }); });
})();
// --- Scroll-reveal for hero / section headings / grid cards ---
// Runs here (footer, last on every page) so the whole page's DOM already
// exists by the time it queries for targets.
(function () {
var targets = document.querySelectorAll('.hero, .sec-head, .grid > .card');
if (!targets.length) return;
// .reveal-done releases the transform property back to the normal
// cascade once the entrance animation finishes, so it stops
// out-specificity-ing each component's own :hover transform (see
// global.css). classList.add is idempotent, so it's safe to call
// this from both the transitionend listener and its timeout backstop
// below — transitionend can miss (tab backgrounded mid-transition,
// a reduced-motion change interrupting it, etc.), and this state
// must not get stuck with hover permanently disabled if it does.
function markDone(el) {
el.classList.add('reveal-done');
}
if (!('IntersectionObserver' in window)) {
// No-IntersectionObserver browsers still get html.js-reveal from
// BaseHead.astro, so without this fallback these elements would
// stay hidden forever — just show everything immediately.
targets.forEach(function (el) { el.classList.add('is-visible'); markDone(el); });
return;
}
var observer = new IntersectionObserver(function (entries) {
entries.forEach(function (entry) {
if (!entry.isIntersecting) return;
var el = entry.target;
el.classList.add('is-visible');
el.addEventListener('transitionend', function () { markDone(el); }, { once: true });
setTimeout(function () { markDone(el); }, 1500);
observer.unobserve(el);
});
}, { threshold: 0.15, rootMargin: '0px 0px -40px 0px' });
targets.forEach(function (el) { observer.observe(el); });
})();
</script> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <script>
(function () {
var bar = document.getElementById('read-bar');
var article = document.getElementById('article-body');
if (!bar || !article) return;
function onScroll() {
var rect = article.getBoundingClientRect();
var total = article.offsetHeight - window.innerHeight;
var scrolled = -rect.top;
var pct = total > 0 ? Math.min(100, Math.max(0, (scrolled / total) * 100)) : 0;
bar.style.width = pct + '%';
}
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
})();
(function () {
var article = document.getElementById('article-body');
if (!article) return;
var blocks = article.querySelectorAll('pre.astro-code, pre[data-language]');
var copyIcon = '<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4"><rect x="5" y="5" width="9" height="9" rx="1.5"/><path d="M3.5 10.5h-1a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v1"/></svg>';
var checkIcon = '<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M3 8.5l3 3 7-7"/></svg>';
blocks.forEach(function (pre) {
if (pre.closest('.code-block')) return;
var code = pre.querySelector('code');
if (!code) return;
var wrapper = document.createElement('div');
wrapper.className = 'code-block';
pre.parentNode.insertBefore(wrapper, pre);
var header = document.createElement('div');
header.className = 'code-block-header';
var lang = pre.dataset.language || '';
if (lang && lang !== 'plaintext' && lang !== 'text') {
var label = document.createElement('span');
label.className = 'code-block-lang';
label.textContent = lang;
header.appendChild(label);
}
var btn = document.createElement('button');
btn.type = 'button';
btn.className = 'code-copy-btn';
btn.setAttribute('aria-label', 'Copy code');
btn.innerHTML = copyIcon + '<span>Copy</span>';
header.appendChild(btn);
wrapper.appendChild(header);
wrapper.appendChild(pre);
btn.addEventListener('click', function () {
navigator.clipboard.writeText(code.textContent || '').then(function () {
btn.innerHTML = checkIcon + '<span>Copied</span>';
btn.classList.add('copied');
setTimeout(function () {
btn.innerHTML = copyIcon + '<span>Copy</span>';
btn.classList.remove('copied');
}, 1500);
});
});
});
})();
</script> <script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"27f68eeabec74b64b61e921ded8cd715","r":1,"spa":2}' crossorigin="anonymous"></script>
<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a39cd88d1fea196e',t:'MTc4OTE5NDQ0MQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body> </html>