mirror of
https://github.com/hanzoai/visor.git
synced 2026-09-24 17:04:14 +00:00
120 lines
6.0 KiB
HTML
120 lines
6.0 KiB
HTML
---
|
|
title: Application Compatibility
|
|
layout: base
|
|
permalink: /application-compatibility/
|
|
---
|
|
|
|
<div class="container">
|
|
<div class="users-content">
|
|
<h1>gVisor Application Compatibility</h1>
|
|
|
|
<style>
|
|
.app-item {
|
|
border-bottom: 1px solid #eee;
|
|
margin-bottom: 20px;
|
|
padding-bottom: 20px;
|
|
}
|
|
/* The last visible app in a category has no separator. :last-child covers
|
|
the static render; .app-item--last is set by the search filter to the
|
|
last still-visible row. */
|
|
.app-item:last-child,
|
|
.app-item.app-item--last {
|
|
border-bottom: none;
|
|
padding-bottom: 0;
|
|
}
|
|
</style>
|
|
|
|
{% assign apps = site.data['application-compatibility'].apps %}
|
|
|
|
<p style="font-size: 16px; line-height: 1.6; margin-top: 20px;">
|
|
Compatibility issues while running applications in gVisor are rare; a large majority of workloads, including those not listed on this page, will "just work."
|
|
<br>
|
|
Below is a small (but growing) sample of applications that are known to work in gVisor.
|
|
This is a <b>best-effort</b> list, not a guarantee that applications marked "Compatible" are fully functional.
|
|
If you notice an issue, contributions to this list are welcome! Please open a pull request on <a href="https://github.com/google/gvisor">GitHub</a>.
|
|
</p>
|
|
|
|
<div style="margin-top: 30px;">
|
|
<input
|
|
type="search"
|
|
id="app-search"
|
|
placeholder="Search applications…"
|
|
aria-label="Search applications"
|
|
autocomplete="off"
|
|
style="width: 100%; box-sizing: border-box; padding: 12px 16px; font-size: 16px; border: 1px solid #d1d9e0; border-radius: 8px; outline: none;"
|
|
/>
|
|
</div>
|
|
|
|
{% assign cat_groups = apps | group_by: "category" | sort: "name" %}
|
|
<div id="app-list" style="margin-top: 25px; margin-bottom: 60px;">
|
|
<p id="app-search-noresults" style="display: none; color: #64748b; font-size: 16px; padding: 20px 0;">No applications match your search.</p>
|
|
{% for cat in cat_groups %}
|
|
<div class="panel panel-default category-panel" style="border-radius: 4px; margin-bottom: 25px;">
|
|
<div class="panel-heading" style="padding: 15px 20px; background-color: #fff;">
|
|
<h2 style="font-size: 20px; font-weight: bold; color: #333; margin: 0;">{{ cat.name }}</h2>
|
|
</div>
|
|
<div class="panel-body" style="background-color: #fcfcfc; padding: 25px 25px 5px 25px; border-top: 1px solid #eee;">
|
|
{% assign sorted_items = cat.items | sort_natural: "name" %}
|
|
{% for item in sorted_items %}
|
|
<div class="app-item" data-name="{{ item.name | downcase | escape }}">
|
|
<div style="display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap;">
|
|
<div style="display: flex; align-items: baseline; flex-wrap: wrap;">
|
|
<span style="font-size: 18px; font-weight: 600; margin-right: 12px; color: #1a202c;">{{ item.name }}</span>
|
|
<span style="font-size: 13px; color: #94a3b8;">{% if item.version and item.version != '' %}Latest version tested: {{ item.version }}{% endif %}{% if item.version and item.version != '' and item.test_source and item.test_source != '' %}. {% endif %}{% if item.test_source and item.test_source != '' %}<a href="https://github.com/google/gvisor/blob/master/{{ item.test_source }}" target="_blank" rel="noopener" style="color: #94a3b8; text-decoration: underline;">Testing methodology</a>{% endif %}</span>
|
|
</div>
|
|
<div>
|
|
{% case item.verdict %}
|
|
{% when 'yes' %}
|
|
<span class="label label-success" style="padding: 6px 12px; font-size: 13px; border-radius: 12px;">Compatible</span>
|
|
{% when 'partial' %}
|
|
<span class="label label-warning" style="padding: 6px 12px; font-size: 13px; border-radius: 12px;">Partial</span>
|
|
{% when 'experimental' %}
|
|
<span class="label label-primary" style="padding: 6px 12px; font-size: 13px; border-radius: 12px;">Experimental</span>
|
|
{% when 'coming-soon' %}
|
|
<span class="label label-info" style="padding: 6px 12px; font-size: 13px; border-radius: 12px;">Coming Soon</span>
|
|
{% when 'no' %}
|
|
<span class="label label-danger" style="padding: 6px 12px; font-size: 13px; border-radius: 12px;">Not compatible</span>
|
|
{% endcase %}
|
|
</div>
|
|
</div>
|
|
{% if item.notes and item.notes != '' %}
|
|
<p style="color: #555; font-size: 14px; line-height: 1.6; margin: 10px 0 0 0;"><strong>Notes:</strong> {{ item.notes | markdownify | remove: '<p>' | remove: '</p>' | strip }}</p>
|
|
{% endif %}
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
<script>
|
|
(function () {
|
|
var input = document.getElementById('app-search');
|
|
if (!input) return;
|
|
var panels = document.querySelectorAll('#app-list .category-panel');
|
|
var noResults = document.getElementById('app-search-noresults');
|
|
|
|
function applyFilter() {
|
|
var q = input.value.trim().toLowerCase();
|
|
var anyVisible = false;
|
|
panels.forEach(function (panel) {
|
|
var lastVisible = null;
|
|
panel.querySelectorAll('.app-item').forEach(function (item) {
|
|
var match = q === '' || (item.getAttribute('data-name') || '').indexOf(q) !== -1;
|
|
item.style.display = match ? '' : 'none';
|
|
item.classList.remove('app-item--last');
|
|
if (match) lastVisible = item;
|
|
});
|
|
if (lastVisible) lastVisible.classList.add('app-item--last');
|
|
panel.style.display = lastVisible ? '' : 'none';
|
|
if (lastVisible) anyVisible = true;
|
|
});
|
|
if (noResults) noResults.style.display = anyVisible ? 'none' : '';
|
|
}
|
|
|
|
input.addEventListener('input', applyFilter);
|
|
})();
|
|
</script>
|
|
</div> <!-- end users-content -->
|
|
</div> <!-- end container -->
|