Strategy

    When an open model line goes closed

    Qwen's image line went from Apache-2.0 to no licence in one version. A stack design that survives licence reversal: what to pin, mirror, and never depend on.

    Versely Team9 min read

    Qwen-Image 1.0 and 2.0 shipped under Apache-2.0 with same-day technical reports. Qwen-Image 3.0, released 21 July 2026 and generally available from 5 August, shipped with no weights, no licence, no technical report and no model card. One version number, complete reversal of distribution posture, no announcement that it was happening.

    The lesson is not "Alibaba is untrustworthy." It is that a lab's release history is not a forecast, and any stack that treated it as one has a design problem that will recur with a different vendor. This is how to build so the next reversal is a config change.

    Three kinds of dependency, three different failure modes

    Most teams talk about "depending on a model" as one thing. It is three, and they fail in unrelated ways.

    Artifact dependency — you have the weights on disk and you run them. Fails when: you lose the files, or the licence you relied on turns out not to cover your use. Does not fail when the vendor stops publishing, because you already have it.

    Capability dependency — you need "an image model that renders legible body copy." Fails when: no available model does the thing. Does not fail when any particular vendor closes, as long as a substitute exists.

    Vendor dependency — you need this model from this lab, because your prompts, your LoRAs, your seeds and your quality bar are all tuned to its specific behaviour. Fails when: the vendor changes anything. Deprecates, reprices, re-licences, or ships a version that renders differently.

    Qwen's reversal hit vendor dependencies hardest and artifact dependencies not at all. The Apache-2.0 weights you already downloaded are still Apache-2.0 — a grant on a release you hold does not evaporate because a later release omits one. What broke was the plan to keep self-hosting the line.

    So the design goal is straightforward to state: move as much of your stack as possible from vendor dependency to capability dependency, and make your artifact dependencies genuinely yours.

    What to pin, and what to mirror

    Pinning means recording an exact, resolvable identity for everything in the path — not a name, an identity.

    Thing Pin this, not that
    Weights Content hash and revision, not "latest"
    Inference code A commit SHA, not a branch
    Licence A snapshot of the LICENSE file text, not a URL
    Model card A saved copy, not a link
    Hosted model Full versioned model name, not a family alias
    Randomness An explicit seed, never the default

    The licence row is the one people skip and the one that costs most. A URL to a licence is a promise that a page will still say what it said. A saved copy with a date is evidence. When a client's legal team asks what terms your deliverable was produced under, a link to a repo that has since been restructured is not an answer.

    The seed row looks like a reproducibility nicety and is actually a migration tool. When you evaluate a replacement model, the only fair comparison is same prompt, same seed, different model. If nothing in your pipeline ever fixed a seed, you cannot measure a migration — you can only have opinions about it.

    Mirroring is the other half: a copy in storage you control, that survives the upstream disappearing.

    1. Weights, config and tokenizer for every model you actually run, at the pinned revision.
    2. The LICENSE file and model card, as text, dated.
    3. The technical report, if there is one. Reports vanish quietly and they are where the model's actual limits are documented.
    4. Your evaluation set — the prompts, the seeds, and the reference outputs. This is the asset nobody mirrors and the one that makes migration tractable. Without reference outputs you cannot tell whether a replacement is worse or just different.
    5. Your prompt library, versioned in the same repo as the code that sends it.

    Item 4 deserves emphasis. When Qwen's line closed, the teams that migrated in a week were the ones who could run forty saved prompts at saved seeds against three candidate models and read the diffs. The teams that took a month were re-deriving what "good" looked like from memory. Building that reference set is cheap as a batch: the agent takes a prompt, a fixed seed and a list of models in a single request, so a forty-prompt eval across three candidates is a scripted afternoon rather than a week of tab-switching.

    What never to build a hard dependency on

    Five things. Each of these has cost somebody a rewrite.

    A promise of future weights. Black Forest Labs announced FLUX 3 on 23 July 2026 with API and private weight access at launch and an open-weight "FLUX 3 Dev" backbone promised later. That is a stated intention from a lab with a track record of shipping open models, and it is still not an artifact. Plan for the hosted version; treat the open one as upside.

    A model's idiosyncratic behaviour. If your output quality depends on a specific model's seed behaviour, its response to a particular prompt dialect, or a fine-tune you built on its base, you have converted a capability dependency into a vendor dependency. Sometimes that is worth it. Know when you are doing it.

    A single provider for a whole content type. If every image in your pipeline comes from one lab, a licence reversal is an outage. Two providers you can switch between is not redundancy theatre; it is what makes the reversal a config change.

    Contested open-weights claims. Wan 3.0 entered public beta on 6 August 2026 with 30-second clips to 1080p and single-pass audio, and its open-weights status is genuinely contradictory across sources — no confirmed checkpoint, no repo, no node. Treat contested as closed until the vendor says otherwise in its own words. The shipped, verifiable open releases this summer are covered in the open-weights wave.

    A model name in more than one file. The refactor that pays for itself: every call goes through one generate(model=…) helper with the model name in config. Forty call sites naming a model is a migration project. One config line is a pull request.

    Closure does not only mean weights

    The Qwen story is about open going closed. The mirror-image risk is a closed model going away entirely, and it is currently more expensive.

    OpenAI announced Sora's discontinuation on 24 March 2026. The consumer app shut on 26 April 2026. The API shuts on 24 September 2026 — about five weeks from today. A pipeline still calling sora-2-pro has a hard deadline, and Disney's billion-dollar deal collapsed with it, which is a reminder that the size of the counterparty is not the hedge people assume.

    Sora is also still visible at No. 8 on Arena's text-to-video leaderboard as of 14 August 2026. A leaderboard rank tells you nothing about whether an endpoint will exist next quarter.

    There is a version of this that is genuinely easier: run the model through a catalog where the vendor relationship is somebody else's problem. Sora 2 Text to Video sitting in a 332-page model catalog means the switch away from it is a model name, not a contract negotiation and an SDK swap. That is not an argument against self-hosting — running open weights on your own terms is a real strategy with real advantages — it is an argument for knowing which of the three dependency types you are taking on, per model, deliberately.

    The whole design fits in one table:

    Dependency Failure mode Hedge
    Self-hosted weights Licence unclear or revoked for new versions Mirror weights + LICENSE text, pin the revision
    Fine-tune on a base model Base is deprecated or re-licensed Keep training data and recipe; treat the tune as rebuildable
    Hosted model, single provider Deprecation, repricing, regional loss Second provider validated against your eval set
    Prompt library tuned to one model Renders differently on anything else Keep prompts declarative; ablate model-specific phrasing
    Vendor's promised future release Never ships Plan on what exists; treat promises as upside

    Nothing here is exotic. It is the discipline any team applies to a database or a payment provider, applied to a dependency class that got popular fast enough that people skipped it. The usage rights question in particular — what you may actually do with an output — is the one clients ask and the one an unmirrored licence link cannot answer.

    FAQ

    Does a licence reversal affect weights I already downloaded?

    No. A grant made on a release you hold stands; a later release omitting a licence does not retroactively revoke an earlier one. What changes is your ability to plan on future versions. Keep your own copy of the weights and the LICENSE file so you can prove the terms you relied on.

    Is "no stated licence" the same as a restrictive licence?

    It is worse for planning purposes. A restrictive licence is a document you can read, price and decide against. No licence is an unanswered question — you cannot demonstrate to a client what you are permitted to do with the output. For commercial deliverables, treat unstated terms as a blocker rather than a grey area.

    How many providers is enough redundancy?

    Two per content type that matters to your business, both validated against the same eval set, both reachable without a code change. A third adds little. The expensive part is never the second integration, it is maintaining a second eval — which is why the shared prompt-and-seed set matters more than the integration count.

    Should this change whether I self-host at all?

    Not by itself. Self-hosting still buys you an artifact nobody can take away, which is exactly what survived the Qwen reversal intact. What should change is the assumption that a line which has shipped open twice will ship open again. Mirror aggressively, pin exactly, and keep the model name in one file.