I would like to suggest to remove "ucs2" USE flag and add "wide-unicode" USE flag, which would have the opposite meaning. The name of "ucs2" USE flag is confusing to some users, who might think that it's somehow useful to enable this flag. Switching this flag changes ABI of Python, so it's reasonable to prevent misinterpretation of usefulness of this flag. Additionally '--enable-unicode=ucs2' and '--enable-unicode=ucs4' options of `configure` have been replaced with '--with-wide-unicode' and '--without-wide-unicode' options in Python 3. "wide-unicode" USE flag would be enabled by IUSE default and package.use.force. If there are no objections, then I will commit suggested changes in next week.
(In reply to comment #0) > Additionally '--enable-unicode=ucs2' and '--enable-unicode=ucs4' options of > `configure` have been replaced with '--with-wide-unicode' and > '--without-wide-unicode' options in Python 3. s/'--enable-unicode=ucs2' and '--enable-unicode=ucs4'/'--enable-unicode=ucs4' and '--enable-unicode=ucs2'/
I'm aware of innocent users playing with it and not being aware of the binary incompatibility. Imho masking the use flag by default, with the possibility to reenable it on certain profiles, would be more sensible, be it for architectural reasons or mememory constraints that ucs2 is a better choice.
(In reply to comment #2) It doesn't matter if "wide-unicode" is forced or "ucs2" is masked. Children profiles can contain "dev-lang/python -wide-unicode" in package.use.force to unforce this flag.
O.k. probably it doesn't matter what's the use flag is called. From my point of view it's just an unnecessary naming change. Features overriding system adminstrators will - like forced use flags (at least the willy-nilly additions to existing profils) and especially use defaults within ebuilds suck badly (alsmost as much as automatic use flag additions were a misfeature back then), because it forces everyone counting on a reasonable _stable_ system to create their very own profile. Having large package.use, package.use.forc, etc. exception lists is time consuming and annoying. Profiles should be considered more or less fixed and such a change should be only forced on users, who are willing to change to a new profile (or at least until they have to, because older profiles being deprecated). And please simply mask it, as it's really unneeded for almost everyone - package.use.force is at least in this case so backwards and unnecessary. I'm not sure, if this feature ever should have been added to Portage at all. More complexity and less transparency in the packaging management isn't winning us any users.
ucs2 flag has negative meaning (similarly to nocxx etc.), because it disables a feature, but current tendency is to use flags with positive meanings (e.g. +cxx). IMHO use.force and package.use.force are useful.
*** Bug 294068 has been marked as a duplicate of this bug. ***
I haven't seen further suggestions, so I have committed the suggested changes.
I think you should announce this subtle change as it will trigger questions why this new use-flag is suddenly in there, and why it is enabled by default. People needlessly have to rebuild python, and occasionally you break people's systems with this nice change. Remember that Python is (unfortunately) a core package.