<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux | 「开源之书 · 共读」</title><link>https://osbook.opensourceway.blog/tags/linux/</link><atom:link href="https://osbook.opensourceway.blog/tags/linux/index.xml" rel="self" type="application/rss+xml"/><description>Linux</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>zh</language><lastBuildDate>Sat, 31 Oct 2026 00:00:00 +0000</lastBuildDate><image><url>https://osbook.opensourceway.blog/media/logo_hu_e1fa4c2b9d4541c1.png</url><title>Linux</title><link>https://osbook.opensourceway.blog/tags/linux/</link></image><item><title>「OSCAR·开源之书·共读」线下分享交流·北京站·2026-10-31</title><link>https://osbook.opensourceway.blog/events/2026-10-31-beijing-reading-meetup/</link><pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate><guid>https://osbook.opensourceway.blog/events/2026-10-31-beijing-reading-meetup/</guid><description>&lt;h1 id="活动概要"&gt;活动概要&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;主题：三十五载的自发秩序&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;时间&lt;/strong&gt;：2026 年 10 月 31 日（周六）&lt;strong&gt;13:30 开始签到&lt;/strong&gt;，议程 14:00 起&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;地点&lt;/strong&gt;：&lt;strong&gt;智源大厦&lt;/strong&gt; · 北京市海淀区成府路 150 号楼&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;场地&lt;/strong&gt;：已确定（报名已超过 5 人）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://osbook.opensourceway.blog/images/events/2026-10-31-zhiyuan-building.jpg" alt="智源大厦（成府路 150 号楼）" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;认准这栋红砖楼，外墙写着「成府路 150 / 150 CHENGFU RD」。
具体楼层与集合方式将在活动前单独通知已报名的书友。&lt;/p&gt;
&lt;p&gt;📍
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div id="oscar-signup" class="oscar-signup" data-event="2026-10-31" data-api="https://signup-api.osbook.opensourceway.blog/api/signup"&gt;
&lt;div class="signup-header"&gt;
&lt;h2&gt;📝 &lt;span class="hl"&gt;报名参加&lt;/span&gt;&lt;/h2&gt;
&lt;p class="signup-sub"&gt;页面公开显示称呼与参与情况；&lt;b&gt;联系方式单独加密存放，不在网页公开&lt;/b&gt;。报名后可在下方凭姓名与联系方式自助修改或取消报名。&lt;/p&gt;
&lt;/div&gt;
&lt;div class="signup-closed" id="signup-closed" hidden&gt;
&lt;div class="closed-icon"&gt;🏁&lt;/div&gt;
&lt;div class="closed-title"&gt;活动已开始，报名截止&lt;/div&gt;
&lt;div class="closed-sub" id="closed-sub"&gt;本场报名已关闭，感谢各位书友的关注。&lt;/div&gt;
&lt;/div&gt;
&lt;div class="signup-stats" id="signup-stats"&gt;
&lt;div class="stat-card"&gt;
&lt;div class="stat-num" id="stat-total"&gt;—&lt;/div&gt;
&lt;div class="stat-label"&gt;已报名&lt;/div&gt;
&lt;/div&gt;
&lt;div class="stat-card"&gt;
&lt;div class="stat-num" id="stat-dinner"&gt;—&lt;/div&gt;
&lt;div class="stat-label"&gt;参加聚餐&lt;/div&gt;
&lt;/div&gt;
&lt;div class="stat-card"&gt;
&lt;div class="stat-num" id="stat-venue"&gt;—&lt;/div&gt;
&lt;div class="stat-label"&gt;当前场地&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="venue-hint" id="venue-hint"&gt;
&lt;span class="venue-icon"&gt;📍&lt;/span&gt;
&lt;span class="venue-text" id="venue-text"&gt;正在获取报名人数…&lt;/span&gt;
&lt;/div&gt;
&lt;form id="signup-form" class="signup-form"&gt;
&lt;div class="form-row"&gt;
&lt;label for="sf-name"&gt;称呼 &lt;span class="req"&gt;*&lt;/span&gt;&lt;/label&gt;
&lt;input type="text" id="sf-name" name="name" required maxlength="40" placeholder="怎么称呼你"&gt;
&lt;/div&gt;
&lt;div class="form-row"&gt;
&lt;label for="sf-contact"&gt;联系方式 &lt;span class="req"&gt;*&lt;/span&gt;&lt;/label&gt;
&lt;input type="text" id="sf-contact" name="contact" required maxlength="120" placeholder="微信 / 邮箱，用于场地变更通知"&gt;
&lt;/div&gt;
&lt;div class="form-row"&gt;
&lt;label&gt;是否参加晚间聚餐&lt;/label&gt;
&lt;div class="radio-group"&gt;
&lt;label class="radio"&gt;&lt;input type="radio" name="dinner" value="yes"&gt; 参加&lt;/label&gt;
&lt;label class="radio"&gt;&lt;input type="radio" name="dinner" value="no" checked&gt; 不参加&lt;/label&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="form-row"&gt;
&lt;label for="sf-reason"&gt;想说的话 / 想讲的话题&lt;/label&gt;
&lt;textarea id="sf-reason" name="reason" rows="3" maxlength="500" placeholder="选填。手上有一本书想讲、一个判断想被反驳、一个还没答案的困惑——都欢迎写在这里"&gt;&lt;/textarea&gt;
&lt;/div&gt;
&lt;button type="submit" class="submit-btn" id="sf-submit"&gt;提交报名&lt;/button&gt;
&lt;div class="form-msg" id="sf-msg"&gt;&lt;/div&gt;
&lt;/form&gt;
&lt;div class="signup-edit" id="signup-edit"&gt;
&lt;button type="button" class="edit-toggle" id="edit-toggle" aria-expanded="false"&gt;
&lt;span class="edit-arrow"&gt;▸&lt;/span&gt; 已报名？想修改聚餐或想说的话
&lt;/button&gt;
&lt;div class="edit-panel" id="edit-panel" hidden&gt;
&lt;div class="edit-step" id="edit-verify"&gt;
&lt;p class="edit-tip"&gt;填写报名时的&lt;b&gt;姓名&lt;/b&gt;与&lt;b&gt;联系方式&lt;/b&gt;，验证后可修改称呼、聚餐与想说的话。&lt;/p&gt;
&lt;div class="form-row"&gt;
&lt;label for="ef-no"&gt;姓名 &lt;span class="req"&gt;*&lt;/span&gt;&lt;/label&gt;
&lt;input type="text" id="ef-no" maxlength="40" placeholder="报名时填的称呼" autocomplete="off"&gt;
&lt;/div&gt;
&lt;div class="form-row"&gt;
&lt;label for="ef-contact"&gt;联系方式 &lt;span class="req"&gt;*&lt;/span&gt;&lt;/label&gt;
&lt;input type="text" id="ef-contact" maxlength="120" placeholder="报名时填的微信 / 邮箱" autocomplete="off"&gt;
&lt;/div&gt;
&lt;button type="button" class="submit-btn" id="ef-verify-btn"&gt;验证并载入&lt;/button&gt;
&lt;div class="form-msg" id="ef-msg"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;form class="edit-step edit-form" id="edit-form" hidden&gt;
&lt;div class="edit-who"&gt;正在修改：&lt;b id="ef-name"&gt;—&lt;/b&gt;（&lt;span id="ef-no-show"&gt;—&lt;/span&gt;）&lt;/div&gt;
&lt;div class="form-row"&gt;
&lt;label for="ef-name-input"&gt;称呼 &lt;span class="req"&gt;*&lt;/span&gt;&lt;/label&gt;
&lt;input type="text" id="ef-name-input" maxlength="40" placeholder="怎么称呼你" autocomplete="off"&gt;
&lt;/div&gt;
&lt;div class="form-row"&gt;
&lt;label&gt;是否参加晚间聚餐&lt;/label&gt;
&lt;div class="radio-group"&gt;
&lt;label class="radio"&gt;&lt;input type="radio" name="ef-dinner" value="yes"&gt; 参加&lt;/label&gt;
&lt;label class="radio"&gt;&lt;input type="radio" name="ef-dinner" value="no" checked&gt; 不参加&lt;/label&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="form-row"&gt;
&lt;label for="ef-reason"&gt;想说的话 / 想讲的话题&lt;/label&gt;
&lt;textarea id="ef-reason" rows="3" maxlength="500" placeholder="选填，500 字以内"&gt;&lt;/textarea&gt;
&lt;/div&gt;
&lt;div class="edit-actions"&gt;
&lt;button type="submit" class="submit-btn" id="ef-save-btn"&gt;保存修改&lt;/button&gt;
&lt;button type="button" class="cancel-btn" id="ef-cancel-btn"&gt;返回&lt;/button&gt;
&lt;/div&gt;
&lt;div class="form-msg" id="ef-msg2"&gt;&lt;/div&gt;
&lt;div class="cancel-zone"&gt;
&lt;button type="button" class="danger-link" id="ef-cancel-signup-btn"&gt;取消报名&lt;/button&gt;
&lt;div class="cancel-confirm" id="ef-cancel-confirm" hidden&gt;
&lt;p class="cancel-warn"&gt;确定要取消报名吗？你的名字会从「已报名书友」名单中移除，&lt;b&gt;之后仍可重新报名&lt;/b&gt;。&lt;/p&gt;
&lt;div class="edit-actions"&gt;
&lt;button type="button" class="danger-btn" id="ef-cancel-yes"&gt;确定取消报名&lt;/button&gt;
&lt;button type="button" class="cancel-btn" id="ef-cancel-no"&gt;再想想&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="form-msg" id="ef-msg3"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="signup-list" id="signup-list" hidden&gt;
&lt;h3&gt;已报名书友&lt;/h3&gt;
&lt;ul id="signup-names"&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;style&gt;
.oscar-signup {
margin: 2.5rem 0;
padding: 2rem 1.75rem;
border: 1px solid #E8E2D4;
border-radius: 12px;
background: #FAF8F3;
}
.signup-header {
text-align: center;
margin-bottom: 1.75rem;
padding-bottom: 1.25rem;
border-bottom: 1px solid #E8E2D4;
}
.signup-header h2 {
margin: 0 0 .5rem;
font-size: 1.9rem;
font-weight: 700;
letter-spacing: .06em;
color: #8B6914;
line-height: 1.3;
}
.signup-header h2 .hl {
background: linear-gradient(transparent 62%, rgba(180,160,120,.35) 62%);
}
.signup-sub { margin: 0; font-size: .85rem; color: #6B6B6B; }
.signup-sub a { color: #8B6914; text-decoration: underline; }
.signup-stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));
gap: .75rem;
margin-bottom: 1.25rem;
}
.stat-card {
text-align: center;
padding: .9rem .5rem;
background: #fff;
border: 1px solid #E8E2D4;
border-radius: 8px;
}
.stat-num { font-size: 1.6rem; font-weight: 700; color: #8B6914; line-height: 1.1; }
.stat-label { font-size: .75rem; color: #6B6B6B; margin-top: .25rem; }
.venue-hint {
display: flex;
gap: .6rem;
align-items: flex-start;
padding: .9rem 1rem;
margin-bottom: 1.5rem;
background: #fff;
border-left: 3px solid #B4A078;
border-radius: 6px;
font-size: .9rem;
line-height: 1.6;
}
.venue-hint.is-confirmed { border-left-color: #2D6A4F; }
.venue-hint.is-coffee { border-left-color: #8B6914; }
.venue-icon { flex-shrink: 0; }
.signup-form { display: flex; flex-direction: column; gap: 1rem; }
.form-row { display: flex; flex-direction: column; gap: .4rem; }
.form-row &gt; label { font-size: .9rem; font-weight: 600; color: #2C2A26; }
.req { color: #B83232; }
.form-row input[type=text],
.form-row textarea {
width: 100%;
padding: .6rem .75rem;
border: 1px solid #D8D2C4;
border-radius: 6px;
font-size: .95rem;
font-family: inherit;
background: #fff;
color: #2C2A26;
}
.form-row input[type=text]:focus,
.form-row textarea:focus {
outline: none;
border-color: #B4A078;
box-shadow: 0 0 0 3px rgba(180,160,120,.15);
}
.form-row textarea { resize: vertical; }
.radio-group { display: flex; gap: 1.25rem; }
.radio { display: inline-flex; align-items: center; gap: .4rem; font-size: .92rem; cursor: pointer; }
.radio input { accent-color: #8B6914; }
.submit-btn {
align-self: flex-start;
padding: .7rem 2rem;
background: #8B6914;
color: #fff;
border: none;
border-radius: 6px;
font-size: .95rem;
font-weight: 600;
cursor: pointer;
transition: background .15s;
}
.submit-btn:hover:not(:disabled) { background: #6E530F; }
.submit-btn:disabled { opacity: .55; cursor: not-allowed; }
.form-msg { font-size: .9rem; line-height: 1.6; }
.form-msg.ok { color: #2D6A4F; }
.form-msg.err { color: #B83232; }
.form-msg code { background: #EFEBE0; padding: .1rem .35rem; border-radius: 3px; font-size: .88em; }
.signup-list { margin-top: 1.75rem; padding-top: 1.25rem; border-top: 1px solid #E8E2D4; }
.signup-list h3 { margin: 0 0 .75rem; font-size: 1.05rem; color: #2C2A26; }
.signup-list ul { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: .5rem; }
.signup-list li {
padding: .3rem .7rem;
background: #fff;
border: 1px solid #E8E2D4;
border-radius: 100px;
font-size: .85rem;
color: #2C2A26;
}
.signup-list li .tag { color: #6B6B6B; font-size: .78rem; margin-left: .3rem; }
.signup-closed {
text-align: center;
padding: 2rem 1.25rem;
margin-bottom: 1.5rem;
background: #F2EFE8;
border: 1px dashed #C9BFA8;
border-radius: 10px;
}
.closed-icon { font-size: 2rem; line-height: 1; margin-bottom: .6rem; }
.closed-title {
font-size: 1.15rem; font-weight: 700; color: #6B5A3E;
letter-spacing: .04em; margin-bottom: .4rem;
}
.closed-sub { font-size: .88rem; color: #8A8272; line-height: 1.6; }
.signup-form.is-closed { display: none; }
.signup-edit {
margin-top: 1.5rem;
padding-top: 1.25rem;
border-top: 1px dashed #E0D9C8;
}
.edit-toggle {
display: inline-flex;
align-items: center;
gap: .4rem;
padding: .45rem .9rem;
background: transparent;
border: 1px solid #D8D2C4;
border-radius: 6px;
color: #8B6914;
font-size: .88rem;
font-family: inherit;
cursor: pointer;
transition: background .15s;
}
.edit-toggle:hover:not(:disabled) { background: #F4F0E6; }
.edit-toggle:disabled { opacity: .5; cursor: not-allowed; }
.edit-arrow { transition: transform .15s; display: inline-block; }
.edit-toggle[aria-expanded="true"] .edit-arrow { transform: rotate(90deg); }
.edit-panel {
margin-top: 1rem;
padding: 1.1rem 1.15rem;
background: #fff;
border: 1px solid #E8E2D4;
border-radius: 8px;
}
.edit-step { display: flex; flex-direction: column; gap: .85rem; }
.edit-tip { margin: 0; font-size: .85rem; color: #6B6B6B; line-height: 1.6; }
.edit-who {
font-size: .88rem; color: #2C2A26;
padding-bottom: .5rem; border-bottom: 1px solid #EFEBE0;
}
.edit-actions { display: flex; gap: .7rem; align-items: center; }
.cancel-btn {
padding: .7rem 1.4rem;
background: #fff;
color: #6B6B6B;
border: 1px solid #D8D2C4;
border-radius: 6px;
font-size: .95rem;
font-family: inherit;
cursor: pointer;
}
.cancel-btn:hover { background: #F4F0E6; }
.oscar-signup.is-closed .edit-toggle { display: none; }
.cancel-zone {
margin-top: .4rem;
padding-top: .9rem;
border-top: 1px solid #EFEBE0;
}
.danger-link {
background: none;
border: none;
padding: 0;
color: #A03A2E;
font-size: .88rem;
font-family: inherit;
text-decoration: underline;
cursor: pointer;
}
.danger-link:hover { color: #7E2A20; }
.cancel-confirm {
margin-top: .75rem;
padding: .9rem 1rem;
background: #FCF4F2;
border: 1px solid #E8C9C2;
border-radius: 6px;
}
.cancel-warn {
margin: 0 0 .75rem;
font-size: .88rem;
color: #6B3A32;
line-height: 1.6;
}
.danger-btn {
padding: .6rem 1.2rem;
background: #A03A2E;
color: #fff;
border: none;
border-radius: 6px;
font-size: .92rem;
font-family: inherit;
cursor: pointer;
}
.danger-btn:hover:not(:disabled) { background: #7E2A20; }
.danger-btn:disabled { opacity: .55; cursor: not-allowed; }
.oscar-signup.is-closed .form-row input[type=text],
.oscar-signup.is-closed .form-row textarea {
background: #F0EDE6; color: #9A9488; cursor: not-allowed;
}
.oscar-signup.is-closed .radio { opacity: .55; cursor: not-allowed; }
&lt;/style&gt;
&lt;script&gt;
(function () {
const root = document.getElementById('oscar-signup');
if (!root) return;
const EVENT = root.dataset.event;
const API = root.dataset.api;
const DATA_URL = 'https://raw.githubusercontent.com/oscar-open-source-book/signups-data/main/' + EVENT + '.json';
const $ = (id) =&gt; document.getElementById(id);
let _deadline = '';
function setDeadline(v) {
if (!v) return;
_deadline = v;
applyClosedState(isExpired());
}
function isExpired() {
if (!_deadline) return false;
const t = Date.parse(_deadline);
return !isNaN(t) &amp;&amp; Date.now() &gt;= t;
}
function applyClosedState(expired) {
const box = $('signup-closed');
const form = $('signup-form');
if (!box) return;
if (!expired) {
box.hidden = true;
root.classList.remove('is-closed');
if (form) form.classList.remove('is-closed');
return;
}
box.hidden = false;
root.classList.add('is-closed');
if (form) {
form.classList.add('is-closed');
form.querySelectorAll('input, textarea, button').forEach(el =&gt; { el.disabled = true; });
}
const sub = $('closed-sub');
if (sub &amp;&amp; _deadline) {
const d = new Date(_deadline);
const pad = (n) =&gt; String(n).padStart(2, '0');
sub.textContent = '本场报名已于 ' + d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' +
pad(d.getDate()) + ' ' + pad(d.getHours()) + ':' + pad(d.getMinutes()) + ' 截止。';
}
}
function setStats(s) {
if (!s) return;
const total = s.total ?? 0;
$('stat-total').textContent = total;
$('stat-dinner').textContent = s.dinner ?? 0;
const vEl = $('stat-venue');
vEl.textContent = '智源大厦';
vEl.style.fontSize = '1.1rem';
updateVenue(total);
}
function updateVenue(total) {
const hint = $('venue-hint');
const text = $('venue-text');
hint.className = 'venue-hint is-confirmed';
if (total &gt;= 1) {
text.innerHTML = `&lt;strong&gt;场地：智源大厦（海淀区成府路 150 号楼）&lt;/strong&gt;&lt;br&gt;已报名 ${total} 人。具体楼层与集合方式将在活动前单独通知。`;
} else {
text.innerHTML = '&lt;strong&gt;场地：智源大厦（海淀区成府路 150 号楼）&lt;/strong&gt;';
}
}
function renderList(rows) {
const wrap = $('signup-list');
const ul = $('signup-names');
rows = (rows || []).filter(function (row) { return !row.cancelled; });
if (!rows.length) { wrap.hidden = true; return; }
wrap.hidden = false;
ul.innerHTML = rows.map(r =&gt; {
const tags = [];
if (r.dinner === 'yes' || r.dinner === true) tags.push('聚餐');
const t = tags.length ? `&lt;span class="tag"&gt;${tags.join(' · ')}&lt;/span&gt;` : '';
return `&lt;li&gt;${escapeHtml(r.name)}${t}&lt;/li&gt;`;
}).join('');
}
function escapeHtml(s) {
return String(s || '').replace(/[&amp;&lt;&gt;"']/g, c =&gt;
({ '&amp;': '&amp;amp;', '&lt;': '&amp;lt;', '&gt;': '&amp;gt;', '"': '&amp;quot;', "'": '&amp;#39;' }[c]));
}
async function refresh() {
try {
const r = await fetch(DATA_URL + '?t=' + Date.now(), { cache: 'no-store' });
if (r.ok) {
const d = await r.json();
if (d &amp;&amp; Array.isArray(d.signups)) {
if (d.deadline) setDeadline(d.deadline);
const live = d.signups.filter(function (row) { return !row.cancelled; });
setStats(computeStats(live));
renderList(live);
return;
}
}
} catch (_) { }
try {
const r = await fetch(API + '?event=' + encodeURIComponent(EVENT), { cache: 'no-store' });
const d = await r.json();
if (d.ok) {
if (d.deadline) setDeadline(d.deadline);
setStats(d.stats);
renderList(d.signups);
if (typeof d.expired === 'boolean' &amp;&amp; d.expired) applyClosedState(true);
}
} catch (e) { }
}
function computeStats(rows) {
const live = (rows || []).filter(function (r) { return !r.cancelled; });
let dinner = 0;
live.forEach(r =&gt; { if (r.dinner === 'yes' || r.dinner === true) dinner++; });
return { total: live.length, dinner: dinner };
}
$('signup-form').addEventListener('submit', async (ev) =&gt; {
ev.preventDefault();
const form = ev.currentTarget;
const btn = $('sf-submit');
const msg = $('sf-msg');
btn.disabled = true;
btn.textContent = '提交中…';
msg.className = 'form-msg';
msg.textContent = '提交中…';
function showMsg(kind, html) {
msg.className = 'form-msg ' + kind;
msg.innerHTML = html;
try {
msg.scrollIntoView({ behavior: 'smooth', block: 'center' });
} catch (_) {
msg.scrollIntoView();
}
try {
sessionStorage.setItem('oscar_signup_msg', JSON.stringify({
kind: kind, html: html, ts: Date.now()
}));
} catch (_) {}
}
const fd = new FormData(form);
const payload = {
event: EVENT,
name: (fd.get('name') || '').trim(),
contact: (fd.get('contact') || '').trim(),
mode: 'offline',
dinner: fd.get('dinner') || 'no',
reason: (fd.get('reason') || '').trim()
};
try {
const r = await fetch(API, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
const d = await r.json();
if (d.ok) {
if (d.duplicate) {
if (d.name_conflict) {
showMsg('err', '该称呼已有报名记录。'
+ '&lt;br&gt;&lt;span style="font-size:.9em"&gt;'
+ '· 若是您本人要改信息 → 用页面下方「修改报名」&lt;br&gt;'
+ '· 若您与已报名者同名但并非同一人 → 请在称呼后加括号区分，'
+ '如「张三（另一位）」，或直接联系组织者'
+ '&lt;/span&gt;');
} else {
showMsg('ok', `该联系方式已报名过，编号 &lt;code&gt;${escapeHtml(d.signup_no)}&lt;/code&gt;。`);
}
} else {
showMsg('ok', `✓ 报名成功！你的报名编号：&lt;code&gt;${escapeHtml(d.signup_no)}&lt;/code&gt;&lt;br&gt;&lt;span style="font-size:.85em;color:#6B6B6B"&gt;如需修改或取消，可在页面下方凭姓名与联系方式自助操作。&lt;/span&gt;`);
setTimeout(() =&gt; { try { form.reset(); } catch (_) {} }, 300);
}
if (d.stats) setStats(d.stats);
refresh();
} else if (d.expired) {
applyClosedState(true);
showMsg('err', '活动已开始，报名截止。');
} else {
showMsg('err', '提交失败：' + (d.error || r.status));
}
} catch (e) {
showMsg('err', '网络错误：' + (e.message || e));
} finally {
btn.disabled = false;
btn.textContent = '提交报名';
}
});
applyClosedState(isExpired());
(function restoreMsg() {
const m = $('sf-msg');
if (!m) return;
try {
const raw = sessionStorage.getItem('oscar_signup_msg');
if (!raw) return;
const o = JSON.parse(raw);
if (!o || !o.html) return;
if (Date.now() - (o.ts || 0) &gt; 60000) { sessionStorage.removeItem('oscar_signup_msg'); return; }
m.className = 'form-msg ' + (o.kind || 'ok');
m.innerHTML = o.html;
setTimeout(() =&gt; {
try { m.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch (_) { m.scrollIntoView(); }
}, 300);
} catch (_) {}
})();
refresh();
setInterval(refresh, 30000);
})();
&lt;/script&gt;
&lt;script&gt;
(function () {
var boot = document.getElementById('oscar-signup');
if (!boot) return;
var CFG = {
event: boot.dataset.event,
api: boot.dataset.api,
state: { verified: false, no: '', contact: '' }
};
window.__oscarEditCfg = CFG;
function byId(elId) {
return document.getElementById(elId);
}
function showBox(elId, text, kind) {
var el = byId(elId);
if (!el) return;
el.className = 'form-msg ' + (kind || '');
el.textContent = text || '';
}
function expired() {
var box = byId('signup-closed');
if (box &amp;&amp; !box.hidden) return true;
return false;
}
var toggle = byId('edit-toggle');
if (toggle) {
toggle.addEventListener('click', function () {
if (toggle.disabled || expired()) return;
var panel = byId('edit-panel');
var open = toggle.getAttribute('aria-expanded') === 'true';
toggle.setAttribute('aria-expanded', open ? 'false' : 'true');
if (panel) panel.hidden = open;
});
}
var verifyBtn = byId('ef-verify-btn');
if (verifyBtn) {
verifyBtn.addEventListener('click', function () {
if (expired()) {
showBox('ef-msg', '报名已截止，无法修改。', 'err');
return;
}
var noVal = (byId('ef-no') || {}).value || '';
var ctVal = (byId('ef-contact') || {}).value || '';
noVal = noVal.trim();
ctVal = ctVal.trim();
if (!noVal || !ctVal) {
showBox('ef-msg', '请填写姓名和联系方式。', 'err');
return;
}
verifyBtn.disabled = true;
verifyBtn.textContent = '验证中…';
var url = CFG.api + '/edit?event=' + encodeURIComponent(CFG.event) +
'&amp;signup_no=' + encodeURIComponent(noVal) +
'&amp;contact=' + encodeURIComponent(ctVal);
fetch(url, { cache: 'no-store' })
.then(function (r) { return r.json(); })
.then(function (d) {
if (!d || !d.ok) {
if (d &amp;&amp; d.expired) {
showBox('ef-msg', '报名已截止，无法修改。', 'err');
return;
}
showBox('ef-msg', (d &amp;&amp; d.error) || '验证失败', 'err');
return;
}
CFG.state.verified = true;
CFG.state.no = noVal;
CFG.state.contact = ctVal;
byId('ef-name').textContent = d.name || '—';
byId('ef-no-show').textContent = d.signup_no || noVal;
var nameInput = byId('ef-name-input');
if (nameInput) nameInput.value = d.name || '';
var reasonEl = byId('ef-reason');
if (reasonEl) reasonEl.value = d.reason || '';
var radios = document.querySelectorAll('input[name="ef-dinner"]');
for (var i = 0; i &lt; radios.length; i++) {
radios[i].checked = (radios[i].value === (d.dinner || 'no'));
}
byId('edit-verify').hidden = true;
byId('edit-form').hidden = false;
})
.catch(function (e) {
showBox('ef-msg', '网络错误：' + (e &amp;&amp; e.message ? e.message : e), 'err');
})
.finally(function () {
verifyBtn.disabled = false;
verifyBtn.textContent = '验证并载入';
});
});
}
var editForm = byId('edit-form');
if (editForm) {
editForm.addEventListener('submit', function (ev) {
ev.preventDefault();
if (!CFG.state.verified) {
showBox('ef-msg2', '请先验证身份。', 'err');
return;
}
if (expired()) {
showBox('ef-msg2', '报名已截止，无法修改。', 'err');
return;
}
var saveBtn = byId('ef-save-btn');
saveBtn.disabled = true;
saveBtn.textContent = '保存中…';
showBox('ef-msg2', '保存中…', '');
var picked = document.querySelector('input[name="ef-dinner"]:checked');
var newName = ((byId('ef-name-input') || {}).value || '').trim();
if (!newName) {
showBox('ef-msg2', '称呼不能为空。', 'err');
saveBtn.disabled = false;
saveBtn.textContent = '保存修改';
return;
}
var payload = {
event: CFG.event,
signup_no: CFG.state.no,
contact: CFG.state.contact,
name: newName,
dinner: picked ? picked.value : 'no',
reason: ((byId('ef-reason') || {}).value || '').trim()
};
fetch(CFG.api + '/edit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
})
.then(function (r) { return r.json(); })
.then(function (d) {
if (d &amp;&amp; d.ok) {
showBox('ef-msg2', '✓ 已保存。公开名单上的聚餐标记已同步更新。', 'ok');
setTimeout(function () {
var panel = byId('edit-panel');
var tg = byId('edit-toggle');
if (panel) panel.hidden = true;
if (tg) tg.setAttribute('aria-expanded', 'false');
byId('edit-form').hidden = true;
byId('edit-verify').hidden = false;
showBox('ef-msg', '修改已保存。', 'ok');
}, 900);
} else if (d &amp;&amp; d.expired) {
showBox('ef-msg2', '报名已截止，无法修改。', 'err');
} else {
showBox('ef-msg2', (d &amp;&amp; d.error) || '保存失败', 'err');
}
})
.catch(function (e) {
showBox('ef-msg2', '网络错误：' + (e &amp;&amp; e.message ? e.message : e), 'err');
})
.finally(function () {
saveBtn.disabled = false;
saveBtn.textContent = '保存修改';
});
});
}
var cancelBtn = byId('ef-cancel-btn');
if (cancelBtn) {
cancelBtn.addEventListener('click', function () {
var panel = byId('edit-panel');
var tg = byId('edit-toggle');
if (panel) panel.hidden = true;
if (tg) tg.setAttribute('aria-expanded', 'false');
byId('edit-form').hidden = true;
byId('edit-verify').hidden = false;
CFG.state.verified = false;
showBox('ef-msg', '', '');
showBox('ef-msg2', '', '');
var cc = byId('ef-cancel-confirm');
if (cc) cc.hidden = true;
showBox('ef-msg3', '', '');
});
}
var cancelLink = byId('ef-cancel-signup-btn');
if (cancelLink) {
cancelLink.addEventListener('click', function () {
var box = byId('ef-cancel-confirm');
if (box) box.hidden = false;
cancelLink.hidden = true;
});
}
var cancelNo = byId('ef-cancel-no');
if (cancelNo) {
cancelNo.addEventListener('click', function () {
var box = byId('ef-cancel-confirm');
if (box) box.hidden = true;
if (cancelLink) cancelLink.hidden = false;
});
}
var cancelYes = byId('ef-cancel-yes');
if (cancelYes) {
cancelYes.addEventListener('click', function () {
if (!CFG.state.verified) {
showBox('ef-msg3', '请先验证身份。', 'err');
return;
}
if (expired()) {
showBox('ef-msg3', '报名已截止，无法取消。', 'err');
return;
}
cancelYes.disabled = true;
cancelYes.textContent = '取消中…';
showBox('ef-msg3', '正在处理…', '');
fetch(CFG.api + '/cancel', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
event: CFG.event,
signup_no: CFG.state.no,
contact: CFG.state.contact
})
})
.then(function (r) { return r.json(); })
.then(function (d) {
if (d &amp;&amp; d.ok) {
showBox('ef-msg3', d.already ? '你的报名已经取消过了。'
: '✓ 已取消报名，名字已从名单移除。如需再来，可重新报名。', 'ok');
var cc = byId('ef-cancel-confirm');
if (cc) cc.hidden = true;
setTimeout(function () {
try {
location.reload();
} catch (_) {
location.href = location.href;
}
}, 1200);
} else if (d &amp;&amp; d.expired) {
showBox('ef-msg3', '报名已截止，无法取消。', 'err');
} else {
showBox('ef-msg3', (d &amp;&amp; d.error) || '取消失败', 'err');
}
})
.catch(function (e) {
showBox('ef-msg3', '网络错误：' + (e &amp;&amp; e.message ? e.message : e), 'err');
})
.finally(function () {
cancelYes.disabled = false;
cancelYes.textContent = '确定取消报名';
});
});
}
})();
&lt;/script&gt;
&lt;h2 id="议程"&gt;议程&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;时段&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;13:30 – 14:00&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;签到、寒暄、Network&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14:00 – 15:30&lt;/td&gt;
&lt;td&gt;Linux Kernel 35 周年的报告解读 ——《三十五载的自发秩序：Linux Kernel 35 周年报告深度解构》&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15:30 – 16:00&lt;/td&gt;
&lt;td&gt;开源项目是否是 Public good？治理与法理视角的博弈&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16:00 – 17:00&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;场域与权力：布迪厄能给开源分析什么？&lt;/strong&gt; —— 唯真分享 + 现场对话&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17:00 – 17:15&lt;/td&gt;
&lt;td&gt;COSCon'26 的阅读 BoF 策划探讨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17:15 – 17:30&lt;/td&gt;
&lt;td&gt;拍照合影&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17:30 – 18:00&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;缓冲时段&lt;/strong&gt;（应对超时；自由交流）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18:00 – 19:30&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;简易晚餐 · Social&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;时间承诺&lt;/strong&gt;：目标 &lt;strong&gt;17:30&lt;/strong&gt; 结束；若有环节超时，&lt;strong&gt;最晚不超过 18:00&lt;/strong&gt;。18:00 后开始晚餐，不设硬性结束时间。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;议程可能在现场微调。欢迎在报名时写下手上有书想讲、有判断想被反驳的话题，我们会尽量排进 BoF 或自由讨论。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="本期看点"&gt;本期看点&lt;/h2&gt;
&lt;h3 id="一三十五载的自发秩序linux-kernel-35-周年报告解读"&gt;一、三十五载的自发秩序：Linux Kernel 35 周年报告解读&lt;/h3&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&amp;ldquo;It&amp;rsquo;s really easy to make a kernel once. It&amp;rsquo;s really hard to do something over time, constantly, repeatedly, that&amp;rsquo;s stable and works for everybody. That&amp;rsquo;s an amazing engineering feat.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;做一次内核很容易。但要日复一日、不断重复地做一件稳定且适用于所有人的事，这真的很难。这是一项惊人的工程壮举。&lt;/p&gt;
&lt;p&gt;—— 《35 Years of Linux》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在一个充满内卷、地缘撕裂与科层制摩擦的现实世界里，Linux Kernel 的存在本身就是一个违反直觉的奇迹。&lt;/p&gt;
&lt;p&gt;三十五年，它从一个芬兰大学生的业余项目，长成了驱动全球 &lt;strong&gt;40 亿台&lt;/strong&gt; 移动设备、&lt;strong&gt;2 亿多台&lt;/strong&gt; 服务器、以及 &lt;strong&gt;全世界 500 台顶级超算全部&lt;/strong&gt; 的「数字文明底座」。&lt;/p&gt;
&lt;p&gt;本次分享不打算讲代码，也不讲性能指标。我们要做的是另一件事：&lt;strong&gt;把这个项目当作一个制度标本，做一次社会学意义上的病理切片。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;三条线索：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;其一，反抗引力坍缩。&lt;/strong&gt; 任何组织一旦长大，就会不自觉地长出科层制的骨架——层级、审批、边界、责任划分。这是人类协作的万有引力。Linux 却在 35 年里持续对抗这股力量：模块化设计让「局部自治」成为可能，Git 让贡献的可见性与可追溯性不再依赖任何中心机构。它做到了人类历史上罕见的超大规模分布式动员。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;其二，代码背后的宪法。&lt;/strong&gt; 维系这片创新公地的，从来不是某个人的威望，而是一整套&lt;strong&gt;非正式制度&lt;/strong&gt;：邮件列表里的评审礼仪、&lt;code&gt;Signed-off-by&lt;/code&gt; 的 DCO 承诺、维护者梯队的隐性晋升路径、陌生人之间的技术契约。最能说明问题的一个事实是——那些曾经视它为威胁的巨头企业，最终不仅妥协，还贡献了超过 &lt;strong&gt;80%&lt;/strong&gt; 的代码。这不是慈善，是制度让人相信长期投入是可预期的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;其三，AGI 时代的破局。&lt;/strong&gt; 当 AI Agent 生成的代码像潮水般涌入内核邮件列表（Sashiko 审查机器人已经出现），开源协作正在从「人与人」升级为「人与 Agent 的双重代理」。真正的问题不是 AI 会不会写代码，而是：&lt;strong&gt;当生成的成本趋近于零，共识与信任还能靠什么建立？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;根据 Linux Foundation 2026 年发布的报告，这场协作的规模依然在扩张：7.2 版本创下 &lt;strong&gt;16,418 次提交 / 2,652 位开发者&lt;/strong&gt; 的纪录；2025 年 9 月至 2026 年 8 月，共 &lt;strong&gt;8,918 位贡献者&lt;/strong&gt; 来自 &lt;strong&gt;981 个组织&lt;/strong&gt;；前 100 位贡献者承担了约一半的工作量。新血也在持续进入——7.0、7.1、7.2 三个版本分别有 489、530、613 位首次贡献者。&lt;/p&gt;
&lt;p&gt;数字很漂亮。但数字回答不了那个老问题：&lt;strong&gt;当一个人不再做了，接得上的第二个人在哪里？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这不是一场关于过去的技术怀旧，而是一份面向未来的、关于如何在高度复杂的数字世界里建立「自由、开放与信任」的生存指南。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="二开源项目是否是-public-good治理与法理视角的博弈"&gt;二、开源项目是否是 Public good？治理与法理视角的博弈&lt;/h3&gt;
&lt;p&gt;这是一个看似学术、实则决定产业政策走向的问题。&lt;/p&gt;
&lt;p&gt;如果开源软件是&lt;strong&gt;公共品（public good）&lt;/strong&gt;——非竞争性、非排他性——那么按照公共经济学的教科书结论，私人市场必然供给不足，政府理应介入补贴。这是一个非常有力的论点，也是许多国家制定开源政策时的理论起点。&lt;/p&gt;
&lt;p&gt;但这里藏着一连串的偷换。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一层：代码是公共品，项目不是。&lt;/strong&gt; 一张 GPL 下的源码副本确实可以被无限次复制而不减损。但&lt;strong&gt;维护这个项目&lt;/strong&gt;这件事——review、merge、发版、处理安全响应——是高度竞争性的：维护者的时间不可复制，一个 bug 被复核就意味着另一个 bug 被延后。把「产出的非竞争性」当成「生产的非竞争性」，是这一整套论证最常见的滑倒点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二层：许可证不是公共品的标志，而是边界的设计。&lt;/strong&gt; 尤其是 copyleft。它常被描述为「传染性」，这个措辞本身就是一场语言战争——相反，它更准确的形容是&lt;strong&gt;互惠（reciprocity）&lt;/strong&gt;：你可以用，但如果你改了并分发出去，你要把改动同样交回来。它没有把代码变成无主之地，恰恰相反，它用许可证划出了一块&lt;strong&gt;有规则的公地&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三层：俱乐部品可能比公共品更准确。&lt;/strong&gt; 奥斯特罗姆的研究早就指出，现实中大量成功存续的公地，既非纯粹公共品也非纯粹私人物品，而是&lt;strong&gt;俱乐部品（club goods）&lt;/strong&gt;：有排他性的边界（谁能进、谁不能进），但内部非竞争。开源项目的「贡献者资格」「committer 提名」「维护者梯队」，做的正是这件事——它们在维护一个准入边界。&lt;/p&gt;
&lt;p&gt;这不是咬文嚼字。&lt;strong&gt;一旦你把开源定义为公共品，政策工具箱就只剩下「补贴」；一旦你把它定义为制度化的公地，工具箱里才有「治理」——而治理是可以被设计的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这也是为什么「AI 生成代码大量涌入」会成为一个制度问题，而不只是技术问题：当贡献的边际成本趋近于零，准入边界的意义就被彻底重估了。谁在审？审的标准是什么？审的成本由谁承担？&lt;/p&gt;
&lt;p&gt;本节将围绕这几个层次展开，不预设结论，但会把每一层的论证与反驳都摆到桌面上。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="三coscon26-阅读-bof-策划探讨"&gt;三、COSCon'26 阅读 BoF 策划探讨&lt;/h3&gt;
&lt;p&gt;每年 COSCon 都是一次难得的聚会——人是齐的，但时间永远不够。&lt;/p&gt;
&lt;p&gt;阅读 BoF（Birds of a Feather）是一个奇特的存在：它不追求讲清楚什么，而是让一群平时只在邮件列表和线上会议里碰面的人，坐在同一间屋子里，围绕同一批书，把话说完。&lt;/p&gt;
&lt;p&gt;本节想和大家一起把这件事策划清楚：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;主题怎么定&lt;/strong&gt;：是围绕某一本书深读，还是围绕一个命题（比如「维护者的可持续性」）横向串几本？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;形式怎么走&lt;/strong&gt;：圆桌？每人 5 分钟带一本书？还是提前发问题、现场只讨论？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;产出是什么&lt;/strong&gt;：一场聊完就散的聚会，还是留下点可沉淀的东西——书单、讨论纪要、或者下一个选题的种子？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;怎么让人真的来&lt;/strong&gt;：BoF 最难的不是内容，是让人愿意在一个已经排满的会期里，挤出两个小时。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你参加过以前的活动，或者只是想提一个「如果能这样就好了」，这一节就是留给你说话的。&lt;strong&gt;这一节没有讲者，只有参与者。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="四场域与权力布迪厄能给开源分析什么"&gt;四、场域与权力：布迪厄能给开源分析什么？&lt;/h3&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;这一节的由来有点特别。唯真在报名时写下了这样一段话：&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;关系性是我现在较为关注的问题，比如布迪厄关心的关系性的场域分析；Meta 开源 LLaMA、国内&amp;quot;开源&amp;quot;与自主可控的政策叙事，是否意味着场域正被更大的权力场（国家、科技巨头）重新结构化？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;于是我们把这一格留给了她——不是请她来回答，而是请她把这个提问展开。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;「开源之道」在过去几年里反复借用布迪厄，但用得并不完整。我们主要用的是他的&lt;strong&gt;资本理论&lt;/strong&gt;：《资本的各种形式》讲的资本不止一种，经济资本、文化资本、社会资本，以及在特定条件下相互兑换的规则。&lt;/p&gt;
&lt;p&gt;用这套框架看开源场域很顺：这里通行的本位币不是钱，是技术声誉与制度信任。所以大厂拿着预算进场，想直接购买话语权，往往买不到——&lt;strong&gt;这不是因为他们钱不够，而是因为兑换汇率不归他们定。&lt;/strong&gt; 我们把这种现象叫作「无锚印钞」。同样地，科层制的 KPI 算不出开源的账，也是因为它用错了度量衡：它试图用经济资本的尺子去量社会资本。&lt;/p&gt;
&lt;p&gt;但唯真的提问指向了布迪厄的&lt;strong&gt;另一半&lt;/strong&gt;——那个我们一直用着、却没有正面展开的概念：&lt;strong&gt;场域（champ / field）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;场域不是「领域」或「圈子」的雅称。布迪厄的场域是一个&lt;strong&gt;关系性的结构&lt;/strong&gt;：它由位置之间的客观关系构成，而不是由占据位置的人构成；场域有自己的入场券、自己的赌注、自己的等级；最关键的是，场域&lt;strong&gt;有自己的自主性（autonomie）&lt;/strong&gt;——它能在多大程度上按自己的内部逻辑运转，而不被外部权力直接改写。&lt;/p&gt;
&lt;p&gt;由此，一个尖锐的问题就出现了：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;开源作为一个场域，它的自主性有多强？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当许可证的选择开始服从出口管制与地缘政治的判断，这还是场域内部的规则竞争吗？&lt;/li&gt;
&lt;li&gt;当「自主可控」成为一种政策叙事，它进入场域的方式是资源的注入，还是&lt;strong&gt;赌注的替换&lt;/strong&gt;——把技术声誉这个赌注，换成了政治正确性？&lt;/li&gt;
&lt;li&gt;当 LLaMA 这类权重以「开源」之名发布，它究竟是加入了这个场域，还是在&lt;strong&gt;重新划定场域的边界&lt;/strong&gt;，把「开放」的定义权收回到巨头手里？&lt;/li&gt;
&lt;li&gt;更进一步：布迪厄说场域内部有「被支配者」与「支配者」的持续斗争。那么在开源场域里，谁是被支配者？是那些在 issue 里提交却无人回应的新人，还是那些无法把贡献兑换为职业发展的人？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一节想做的事有三件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;把布迪厄的场域理论讲清楚&lt;/strong&gt;——不是作为一堆术语，而是作为一套可以拿来用的分析工具：场域、惯习（habitus）、资本、自主性、符号暴力（violence symbolique），它们各自回答什么问题，不能回答什么问题；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用它检验我们已经用过的那些判断&lt;/strong&gt;——「资本转换」「无锚印钞」「KPI 算不出开源的账」，在场域视角下是否仍然成立？哪里成立，哪里可能被过度简化了？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回到唯真的问题&lt;/strong&gt;——「更大的权力场重新结构化」这个判断，能否被观察和检验？如果能，看什么证据；如果不能，那它的边界在哪里。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我们想特别说明一点：&lt;strong&gt;布迪厄是一把好用的刀，但不是唯一的刀，更不是能解释一切的刀。&lt;/strong&gt; 他一直被批评的一点是——过于强调再生产，对变迁的解释力不足；把一切批判都收束到「符号暴力」，容易让分析停在揭穿，而走不到「那该怎么办」。&lt;/p&gt;
&lt;p&gt;所以在开源这个具体场域里，我们更想问的是：&lt;strong&gt;当我们说一个场域被外部权力结构化了，我们能不能指出具体的机制、具体的成本、以及具体的、可被抵抗的位置？&lt;/strong&gt; 如果布迪厄只能帮我们说出「这是符号暴力」，而不能帮我们找到一个可以动手的地方，那这个工具就还没用到位。&lt;/p&gt;
&lt;p&gt;这一节由唯真开场，然后交给在场所有人。带上你对「场域」的疑问、反驳，或者你觉得这个框架解释不了的地方。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="五征集中欢迎任何话题"&gt;五、征集中：欢迎任何话题&lt;/h3&gt;
&lt;p&gt;以上四个是已经确定的方向，但这一场还留着格子——&lt;strong&gt;我们故意留空了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;「OSCAR·开源之书·共读」从第一天起就不是一个单向输出的场合。它更像一个持续进行的对话，话题由到场的人共同决定。&lt;/p&gt;
&lt;p&gt;如果你手上有一本书想讲、一个判断想被反驳、或者一个困惑一直没有答案，欢迎在报名时写下来。我们会尽可能把它排进议程。&lt;/p&gt;
&lt;p&gt;不限于开源——制度、历史、技术哲学、出版、教育，只要它和「人类如何协作生产」这件事相关，都欢迎。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参与须知"&gt;参与须知&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;请遵守
&lt;/li&gt;
&lt;li&gt;带上你可以随时随地接入大模型的工具即可&lt;/li&gt;
&lt;li&gt;自由交流（AKA 最具特色的交流，也是开源最具魅力的探讨）&lt;/li&gt;
&lt;li&gt;我们倡导即时提问和回答，但是大的问题可以提前提出来，提前思考&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="行为准则"&gt;行为准则&lt;/h2&gt;
&lt;p&gt;请遵守 OSCAR 行为准则。请参考「开源之道」所倡导的方式谈话、行事、社交，以及进行相关事务的处理。请遵守相关制度和法则。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;现场录像/录音（如有需要，请和当事人做沟通）&lt;/li&gt;
&lt;li&gt;拍照（鼓励）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="特别感谢赞助"&gt;特别感谢赞助&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;活动场地赞助&lt;/strong&gt;：智源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;咖啡/小食赞助&lt;/strong&gt;：朱其罡&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图书礼品赞助&lt;/strong&gt;：征集中～（任何书籍，或「开源之书·共读书单」中的书籍；开源项目贴纸/周边）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;联合支持小组&lt;/strong&gt;：「开源之法与经济」、CCF ODTC&lt;/p&gt;
&lt;h2 id="组织"&gt;组织&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;策划&lt;/strong&gt;：王厚&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主持人&lt;/strong&gt;：征集中～&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;协助/记录&lt;/strong&gt;：适兕&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;报名&lt;/strong&gt;：见本页报名区&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="关于oscar开源之书共读"&gt;关于「OSCAR·开源之书·共读」&lt;/h2&gt;
&lt;p&gt;关于「OSCAR·开源之书·共读」所有的过往、价值、事件全都在此：&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2 id="合影留念"&gt;合影留念&lt;/h2&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://osbook.opensourceway.blog/images/events/2026-10-31-group-photo.jpg" alt="「开源之书」·共读 2026-10-31 北京站合影 · WE ARE WHAT WE READ" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;WE ARE WHAT WE READ&lt;/strong&gt; —— 2026.10.31 · 智源大厦 · 12 位共读者&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="活动掠影"&gt;活动掠影&lt;/h2&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://osbook.opensourceway.blog/images/events/2026-10-31-session-01.jpg" alt="「开源之书」·共读 2026-10-31 北京站现场" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;FlagOS 技术系列分享现场。桌上是翻开的笔记与电脑，墙上是智源研究院——三十五年的自发秩序，就在这样一间会议室里被重新讲了一遍。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;本期参考：Linux Foundation Research《35 Years of Linux: The Open Source Engine of Global Infrastructure and Innovation》（2026）；「开源之道」·适兕《三十五载的自发秩序：Linux Kernel 35 周年报告深度解构》；Pierre Bourdieu《The Forms of Capital》(1986)、《The Field of Cultural Production》(1993)、与 Loïc Wacquant 合著《An Invitation to Reflexive Sociology》(1992)&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>