| Every routine op phones home |
p4 edit, p4 add, p4 sync,
p4 submit all require a live server round-trip. There's no local
staging step that doesn't first ask the server's permission. |
| Out-of-band edits need reconciling |
Touch a file without p4 edit first - a script, an IDE that doesn't
shell out to p4, a chmod - and it's invisible to the
server until p4 reconcile walks the workspace and tells it what
actually happened. |
| Binaries still get the whole-file tax |
Storage is delta-encoded RCS for text, full-file for binaries. "Lazy copy"
branching saves space once, at the moment you branch - every binary edit after that
is a fresh full-file revision, same as Git without LFS. |
| MD5 for content integrity |
Chosen when MD5 was still a reasonable choice. It's a hash algorithm with
practical collision attacks published since 2004, still doing the job of proving a
depot file is what it claims to be. |
| Exclusive locking is opt-in and per-path |
Real enforcement, when it's on - p4 submit genuinely fails a
conflicting write. But it only applies to paths an admin remembered to mark
+l or lock explicitly. Unmarked paths get none of it. |
| Closed, end to end |
Closed-source server, proprietary wire protocol, proprietary depot format, no
third-party server implementation. Whatever you build against Perforce, you build
against a moving target nobody outside the vendor can fully audit. |
| Changelist numbers are server-global |
One counter, incrementing across every branch and every stream in the depot at
once - not a DAG of hash-linked revisions with independent, composable history per
branch. |
| Licensing scales with headcount |
Commercial per-seat pricing kicks in past a small free tier - cost tracks how many
people touch the depot, not how much you're actually storing or how you're actually
using it. |