《独立开发者的商业指南·合同、应收与风险》7.1 商标、著作权、专利与商业秘密

商标、著作权、专利与商业秘密保护的不是同一件东西。本节用 Tidecast 的代码、美术、音乐与商标,拆开四类 IP 的保护对象、取得方式、期限与五年成本,算出售价、年费与期望维权准备金,并说明哪些资产可以注册、哪些自动产生、哪些只能靠保密。

以下情境为教学假设,人物与数字不代表经核实的真实案例。

知识产权常被当成一张证书:注册了就有,没注册就没有。真实的 IP 组合更像四套不同的保护机制:商标保护来源识别,著作权保护表达,专利保护技术方案,商业秘密保护未公开的信息。四者的取得方式、维持成本和失效条件完全不同,把它们混成一个「IP」科目,预算就会记错位置。

Tidecast 的资产正好覆盖四类。代码是著作权加商业秘密,美术是著作权,音乐是买断授权、不得转授权,品牌名是商标;游戏机制理论上可以申请专利,但对一个一人工作室,申请与维权的成本通常高于它能带来的收入。LedgerLite 的对照组更简单:代码与服务商标,几乎没有专利和音乐授权。

这一节只回答四个商业问题:每类 IP 保护什么、怎么取得、能保护多久、五年要花多少钱。它不提供法律意见,也不判断某项资产是否真的满足授权条件;所有费用都是教学假设,用来比较量级,不是报价。

四类 IP 保护的不是同一件东西

类型保护对象取得方式期限(教学假设)Tidecast 对应资产
商标品牌名称、标识、产品名注册10 年一续,可续展游戏名与工作室标识
著作权代码、美术、音乐、文字等表达创作完成自动产生法人作品按发表后 70 年估算代码、美术、剧情文本
专利技术方案、机制、流程注册,须满足授权条件自申请起 20 年游戏机制(通常不申请)
商业秘密未公开的算法、参数、名单保密措施,不注册保密状态存续期间服务端配置、平衡参数

商标保护的是「用户看到这个标识,知道是谁做的」。它不保护美术风格,也不保护玩法;别人可以做出画风相近的游戏,只要不用你的名字和标识。Tidecast 注册游戏名,防的是山寨产品用同一个名字截走搜索流量,而不是防玩法被借鉴。

著作权保护的是具体表达,不是想法。代码、美术、音乐、剧情文本在创作完成时自动产生权利;登记不是权利产生的前提,只是让举证更容易。Tidecast 的美术和代码不需要「申请」就有著作权,但如果不做登记、不留创作记录,维权时要先证明「这是我的」。

专利保护的是技术方案,门槛最高。游戏机制可以申请专利,但需要满足新颖性、创造性等条件,申请费、年费和维权费加在一起,通常不是一人工作室的优先项。Tidecast 选择不申请专利,不是因为机制没有价值,而是因为专利的成本结构与它的收入结构不匹配。

商业秘密保护的是「别人不知道」。它没有注册证书,也没有固定期限;只要信息没公开、保密措施还在,保护就继续。代码里的服务端配置、匹配参数、经济系统数值,都可以作为商业秘密;一旦写进公开文档、被离职员工带走、或者被逆向工程还原,保护就可能结束。

取得方式决定你付哪种成本

取得方式适用类型需要做什么典型失败模式
注册商标、专利申请、审查、缴费、续展类别写窄、未续展、被异议
自动产生著作权保留创作记录,可选登记无法证明创作时间与归属
保密商业秘密访问控制、NDA、权限分级公开演示、离职带走、日志泄露

三种取得方式对应三种预算。注册型 IP 的前置成本高,但权利边界清楚;自动产生的著作权前期几乎不花钱,但举证成本在后端;商业秘密没有申请费,却要持续投入保密程序,而且一次泄露就可能归零。

Tidecast 的取舍可以写成一张五年预算表。下表全部是教学假设:商标按 1 个类别、1 个辖区;著作权按登记 5 件重点作品;商业秘密按 1 套代码与配置管理程序;专利按 1 个辖区。单位不同,不能直接比较单价,只能比较五年总成本。

项目单位5 年成本维持方式
商标1 个类别 / 1 个辖区$2,700申请费 $1,200,监测费 $300/年
著作权登记5 件作品$1,500每件 $300,无年费
商业秘密1 套程序$12,500访问控制与保密流程 $2,500/年
专利1 个辖区$21,000申请费 $12,000,年费 $1,800/年
合计(不含专利)$16,700商标 + 著作权 + 商业秘密
合计(含专利)$37,700在上行基础上加专利

这张表最重要的不是总数,而是结构:商业秘密的五年成本 $12,500,比商标和著作权登记加起来还高;专利的五年成本 $21,000,单独一项就超过其余三项之和。很多团队把「申请专利」当成保护创新的默认动作,却忽略了年费和维护才是长期成本的大头。

著作权的 $1,500 也不是「必须花」。不登记同样拥有著作权,登记买的是举证便利。对 Tidecast,重点作品登记 5 件是折中:全部登记会把成本推高,完全不登记又会在侵权时缺少证据。商业秘密的 $12,500 则买不到任何证书,它买的是权限系统、保密协议和离职流程。

期限:保护期不等于收入期

类型法定期限(教学假设)续展与年费保护终止的条件
商标10 年,可无限续展每 10 年续展,另有监测费不续展、连续不使用、被撤销
著作权法人作品按发表后 70 年估算无年费期限届满,或无法证明归属
专利自申请起 20 年年费按年缴纳不缴年费、被无效、期限届满
商业秘密不设固定期限持续投入保密措施信息公开或被合法获取

法定期限很长,商业期限却很短。Tidecast 的游戏收入集中在发售期和长尾,一款横版解谜游戏的主要销售窗口通常只有几年;专利能保护 20 年,但第 15 年的年费不会因为产品已经停止更新而自动消失。用 20 年的保护期去论证一项专利值得申请,是把法律期限当成了收入期限。

把专利的 20 年成本摊开:申请费 $12,000,加 20 年年费 $1,800 × 20 = $36,000,合计 $48,000。前 5 年只花了 $21,000,剩余 15 年还要再付 $27,000。如果产品在第 3 年就不再贡献收入,后 17 年的年费就是纯支出;除非专利用于对外授权或防御性谈判,否则这笔钱的回报很难成立。

商标的期限逻辑相反:它可以无限续展,但每一次续展都要花钱,而且必须持续使用。Tidecast 如果三年后改名、停售或转做续作,旧商标的监测费仍可能继续发生;商标的价值来自持续使用和识别度,不是来自证书本身。著作权期限最长,但维权成本不会因为期限长而降低;商业秘密没有期限,却最脆弱,一次公开演示就可能让保护归零。

决策看法律期限看商业期限应采用的口径
是否申请专利20 年产品收入窗口 3–5 年按商业窗口算年费,不按 20 年摊
是否续展商标可无限续展品牌是否继续使用不用就不续,避免沉没成本
是否登记著作权保护期很长举证需求集中在发行前后重点作品登记,其余留证
是否投入保密无固定期限信息优势能维持多久按信息生命周期配置权限

维权成本:组合的真实价格

IP 预算最容易漏掉的一项是维权。注册费是一次性的,年费是固定的,维权成本却按事件发生,而且通常比注册费高一个量级。下表把单次维权成本乘以假设的发生概率,得到期望准备金;概率是教学设定,不是统计结果。

类型单次维权成本(教学假设)假设概率期望准备金
商标$25,0005 年 20%$5,000
著作权$15,000 / 次5 年 2 次 × 20%$6,000
商业秘密$20,0005 年 20%$4,000
专利$100,0005 年 20%$20,000

把维权准备金加进五年预算,Tidecast 不含专利的组合是 $16,700 + $15,000 = $31,700;含专利的组合是 $37,700 + $35,000 = $72,700。专利让整个 IP 组合的成本从约 $3.2 万变成约 $7.3 万,差额 $41,000,超过组合中其他三项的总和。

这就是「哪些能注册、哪些自动产生、哪些只能靠保密」背后的商业判断:能注册不等于值得注册。商标值得注册,因为它是搜索入口和品牌识别;著作权自动产生,登记只买举证便利;商业秘密必须投入,因为代码和参数是持续竞争力;专利只有在技术方案可授权、可维权、可授权变现时才值得进入预算。

对 Tidecast,音乐是另一种情况:它持有的是买断授权,不是著作权本身,而且不得转授权。音乐可以随游戏一起分发,但不能单独授权给第三方,也不能在出售公司时当作可自由转让的资产。IP 组合表里把音乐写成「自有著作权」,会在尽调时变成一条需要解释的缺口。

代码:把 IP 组合翻译成预算

下面的 ip.ts 把四类 IP 的取得方式、期限、申请费、年费、续展和维权成本固化成一张表。protectionCost 按「年限 × 单位数」计算五年预算,portfolioCoverage 统计组合中注册、自动产生和保密三类各占多少,避免把「数量多」误当成「权利强」。

// file: src/contract/ip.ts
// tier: L1
// verify: node --test test/contract/ip.test.ts

import { type Cents } from "../core/money.ts";
import { type Bps, applyRate, divide } from "../core/rate.ts";
import { type Result, fail, ok } from "../core/result.ts";

export type IpKind = "trademark" | "copyright" | "patent" | "trade_secret";
export type Acquisition = "registration" | "automatic" | "secrecy";

export type IpProfile = {
  kind: IpKind;
  label: string;
  subject: string;
  acquisition: Acquisition;
  termYears: number | null;
  termNote: string;
  filingCostCents: Cents;
  annualCostCents: Cents;
  renewalEveryYears: number | null;
  renewalCostCents: Cents;
  enforcementCostCents: Cents;
};

/**
 * Costs are teaching assumptions, not quotes. Filing is charged per unit:
 * a trademark class in one jurisdiction, a registered copyright work, a patent
 * jurisdiction, or one secrecy program. Annual cost is per unit per year.
 */
export const IP_PROFILES: Record<IpKind, IpProfile> = {
  trademark: {
    kind: "trademark",
    label: "商标",
    subject: "品牌名称、标识、产品名",
    acquisition: "registration",
    termYears: 10,
    termNote: "10 年一续,可无限续展(教学假设)",
    filingCostCents: 120_000,
    annualCostCents: 30_000,
    renewalEveryYears: 10,
    renewalCostCents: 100_000,
    enforcementCostCents: 2_500_000,
  },
  copyright: {
    kind: "copyright",
    label: "著作权",
    subject: "代码、美术、音乐、文字等原创表达",
    acquisition: "automatic",
    termYears: 70,
    termNote: "创作完成即产生;法人作品按发表后 70 年估算(教学假设)",
    filingCostCents: 30_000,
    annualCostCents: 0,
    renewalEveryYears: null,
    renewalCostCents: 0,
    enforcementCostCents: 1_500_000,
  },
  patent: {
    kind: "patent",
    label: "专利",
    subject: "技术方案、机制、流程(须满足授权条件)",
    acquisition: "registration",
    termYears: 20,
    termNote: "自申请起 20 年,不可续展(教学假设)",
    filingCostCents: 1_200_000,
    annualCostCents: 180_000,
    renewalEveryYears: null,
    renewalCostCents: 0,
    enforcementCostCents: 10_000_000,
  },
  trade_secret: {
    kind: "trade_secret",
    label: "商业秘密",
    subject: "未公开的算法、参数、客户名单、流程",
    acquisition: "secrecy",
    termYears: null,
    termNote: "不设固定期限,保密状态存续期间有效",
    filingCostCents: 0,
    annualCostCents: 250_000,
    renewalEveryYears: null,
    renewalCostCents: 0,
    enforcementCostCents: 2_000_000,
  },
};

export const IP_KINDS: IpKind[] = [
  "trademark",
  "copyright",
  "patent",
  "trade_secret",
];

export type IpCostInput = {
  kind: IpKind;
  years: number;
  units: number;
  expectedDisputes?: number;
  disputeProbabilityBps?: Bps;
};

export type IpCost = {
  kind: IpKind;
  years: number;
  units: number;
  filingCents: Cents;
  annualCents: Cents;
  renewalCents: Cents;
  enforcementCents: Cents;
  totalCents: Cents;
};

export type PortfolioCoverage = {
  total: number;
  registeredBps: Bps;
  automaticBps: Bps;
  secrecyBps: Bps;
};

function isIpKind(value: string): value is IpKind {
  return (IP_KINDS as string[]).includes(value);
}

/**
 * A five-year protection budget combines filing, annual maintenance, renewals
 * inside the horizon, and a probability-weighted enforcement reserve. The
 * horizon is deliberately separate from the legal term: a 20-year patent still
 * needs a decision about how many of those years the business will fund.
 */
export function protectionCost(input: IpCostInput): Result<IpCost> {
  if (!isIpKind(input.kind)) {
    return fail(`unknown IP kind: ${input.kind}`);
  }
  if (
    !Number.isInteger(input.years) ||
    input.years <= 0 ||
    input.years > 50
  ) {
    return fail("years must be an integer between 1 and 50");
  }
  if (!Number.isInteger(input.units) || input.units <= 0 || input.units > 100) {
    return fail("units must be an integer between 1 and 100");
  }
  const disputes = input.expectedDisputes ?? 0;
  const probability = input.disputeProbabilityBps ?? 0;
  if (!Number.isInteger(disputes) || disputes < 0) {
    return fail("expected disputes must be a non-negative integer");
  }
  if (
    !Number.isInteger(probability) ||
    probability < 0 ||
    probability > 10000
  ) {
    return fail("dispute probability must be between 0 and 10000 bps");
  }

  const profile = IP_PROFILES[input.kind];
  const filingCents = profile.filingCostCents * input.units;
  const annualCents =
    profile.annualCostCents * input.years * input.units;
  const renewals =
    profile.renewalEveryYears === null
      ? 0
      : Math.floor(input.years / profile.renewalEveryYears);
  const renewalCents =
    renewals * profile.renewalCostCents * input.units;
  const enforcementCents = applyRate(
    profile.enforcementCostCents * disputes,
    probability,
  );

  return ok({
    kind: input.kind,
    years: input.years,
    units: input.units,
    filingCents,
    annualCents,
    renewalCents,
    enforcementCents,
    totalCents:
      filingCents + annualCents + renewalCents + enforcementCents,
  });
}

/** Trademarks and patents are registered; copyright and secrecy are not. */
export function registrable(kind: IpKind): boolean {
  return kind === "trademark" || kind === "patent";
}

/**
 * A portfolio is not stronger because it has more items. This reports how much
 * of it depends on registration, automatic copyright, or operational secrecy,
 * so a buyer can see which assets need a chain-of-title review.
 */
export function portfolioCoverage(kinds: IpKind[]): Result<PortfolioCoverage> {
  if (kinds.length === 0) {
    return fail("portfolio needs at least one IP item");
  }
  const counts: Record<Acquisition, number> = {
    registration: 0,
    automatic: 0,
    secrecy: 0,
  };
  for (const kind of kinds) {
    if (!isIpKind(kind)) {
      return fail(`unknown IP kind: ${kind}`);
    }
    counts[IP_PROFILES[kind].acquisition] += 1;
  }
  const total = kinds.length;
  return ok({
    total,
    registeredBps: divide(counts.registration, total),
    automaticBps: divide(counts.automatic, total),
    secrecyBps: divide(counts.secrecy, total),
  });
}

Tidecast 的参数跑出来是:商标 1 个单位 5 年 $2,700,著作权登记 5 件 $1,500,商业秘密 1 套 $12,500,专利 1 个辖区 $21,000;不含专利合计 $16,700,含专利 $37,700。组合覆盖按五项资产计算:三件著作权资产(含代码与美术)、一件商标、一项商业秘密;注册类只占 20%,自动产生占 60%,保密类占 20%。这个比例说明,Tidecast 的 IP 组合大部分不靠注册,而靠创作记录和保密流程;真正需要主动维护的注册项只有商标。

代码里的 registrable 只回答「这类权利是否通过注册取得」,不回答「是否值得注册」。专利和商标都返回 true,但两者的成本结构完全不同;把 registrable 当成申请建议,会重复本节开头批评的那种混淆。费用参数全部是教学假设,替换成真实报价时,结论可能变化,但计算结构不变。

小结

  • 四类 IP 保护对象不同:商标保护来源识别,著作权保护表达,专利保护技术方案,商业秘密保护未公开信息。
  • 取得方式决定成本结构:商标和专利靠注册,著作权自动产生,商业秘密靠持续保密;没有一种方式同时做到便宜、长久、边界清楚。
  • Tidecast 五年 IP 预算(教学假设):商标 $2,700、著作权登记 $1,500、商业秘密 $12,500、专利 $21,000;不含专利 $16,700,含专利 $37,700。
  • 期限不等于收入期:专利 20 年总成本约 $48,000,但游戏收入窗口通常只有几年;按商业窗口而不是法律期限做申请决策。
  • 维权成本必须进入预算:不含专利的期望准备金 $15,000,含专利 $35,000;专利把组合总成本从 $31,700 推到 $72,700。
  • 音乐是买断授权而非自有著作权,且不得转授权;把它写成自有资产,会在出售或尽调时变成缺口。
  • 组合覆盖率比数量更重要:Tidecast 五项资产中注册类只占 20%,多数价值依赖创作记录与保密流程。

阅读导航:上一节:6.3 投保时点与理赔流程 · 下一节:7.2 开源许可证的商业边界 。

常见错误与边界

  1. 把 IP 当成一张证书。 商标、著作权、专利、商业秘密是四套机制,取得方式、期限和成本都不同;用一个「IP 预算」科目会把它们混在一起。
  2. 以为著作权需要注册才产生。 著作权在创作完成时自动产生;登记买的是举证便利,不是权利本身。
  3. 把专利当成保护的默认动作。 专利的申请费、年费和维权费加在一起,通常高于一人工作室能从中获得的收入。
  4. 用 20 年保护期摊薄年费。 产品收入窗口只有几年,专利年费却按 20 年发生;应按商业窗口计算,不按法律期限。
  5. 忽略商标的持续使用与续展。 商标可以无限续展,但不使用、不续展、被撤销都会让权利消失;证书不是永久资产。
  6. 把商业秘密当成零成本。 保密需要访问控制、协议、权限分级和离职流程;没有这些措施,商业秘密很难成立。
  7. 只看注册费,不看维权成本。 一次专利维权的量级可能是申请费的数倍;组合预算必须包含期望准备金。
  8. 把买断授权当成自有著作权。 Tidecast 的音乐不得转授权;它能随游戏分发,但不能单独授权或自由转让。
  9. 用资产数量衡量 IP 强度。 五项资产里注册类只占 20%,数量多不等于权利强;要看覆盖方式和可转让性。
  10. 把教学假设当成报价。 本节所有费用都是用于比较量级的假设,真实申请与维权成本必须按辖区、类别和案件重新询价。

IP 组合的财务价值,最终不取决于证书数量,而取决于三件事:权利能否证明、能否转让、维权成本是否付得起。下一节讨论开源许可证:它不增加你的 IP,却会改变你能否闭源分发、是否必须公开修改,以及对外提供服务时要不要把源码交出去。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《移动游戏产品的架构·商业化与发行工程》附录 C 商业化与发行评审清单
  2. 《移动游戏产品的架构·商业化与发行工程》附录 B 双案例商业化事实表
  3. 《移动游戏产品的架构·商业化与发行工程》附录 A 商业化与发行术语速查