Tracing back up the object hierarchy in this way will inevitably hit a wall where the hierarchy meets the guts of the interpreter implementation. Even if we don’t hit sys, we still have to deal with object and type. I’ll refer to these objects and modules as “freezing endpoints”.
Such objects and modules are part of internal machinery and will need to be designed to allow cross-interpreter isolation or sharing whilst remaining mutable by the runtime (not necessarily mutable by user code though). sys and os are just examples of freezing endpoints, others may include inspect, weakref, types, collections, collections.abc, typing, importlib, etc. as well as their internal implementations in both C and Python.
In short: large parts of the standard library will need to be rewritten to support freezing.
Is this architecturally possible and feasible given what these objects and modules do without breaking existing functionality? Who will do this work? How much time and effort will it take? How will we communicate and coordinate this with other parties (e.g. extension developers and other implementations such as Cython) – will we end up in a situation where some class is freezable in CPython but not other implementations? Are the benefits worth the costs?
(These are engineering questions which the nogil people had pondered for long but this PEP unfortunately does not currently address in the form of answers along the lines of: “yes free-threading is possible and technically feasible though previous efforts were abortive; the group would do a lot of work adding locks around access and testing them; GIL/nogil is CPython-specific and no change to the Python language; existing code that appears thread-safe only due to GIL is already broken; there will be benchmarked memory and single-threaded performance acceptable loss and multithreaded gains…”)
Given the efforts and costs, the merits of this proposal needs to be judged together with the overall proposition.