[Info-vax] OT: news from the trenches (re: Solaris)
Stephen Hoffman
seaohveh at hoffmanlabs.invalid
Fri Mar 13 18:48:25 EDT 2015
On 2015-03-13 21:52:11 +0000, John Reagan said:
> Just as soon as 64-bit descriptors become the default, all the code
> that handles descriptors today gets updated, all the languages do
> 64-bit pointers, etc. Makes the whole 'recompile and go' rather nasty
> especially in a mixed-architecture cluster.
I am very well aware of the differences in the code.
I'd generally suggest that the 32-bit path be the ugly source code path
and the ugly and complex build procedures, with the pragmas and the
qualifiers that are necessary to allow the folks to "compile and go"
their old code, code with old ptrdiff_t and size_t dependencies, and
preferably with diagnostics around any eventual deprecation when and if
that's planned. Need compatibility? Need that 32-bit ptrdiff_t?
Need strcpy or strcat or other unsafe calls? Then set the #pragma
WILL_BE_DEPRECATED and/or use the
/FIRST_INCLUDE=your-pragma-deprecated-file-here.h qualifier, or require
that the build-procedure DCL code be tweaked to use the
/STANDARD=32_BIT_DEPRECATED or some such, or go set this forest of
DECC$ logical names.
Put another way, don't clutter up the 64-bit code, and don't clutter up
the 64-bit APIs for compatibility with the existing source code.
Don't clutter up your future environment. Make the "proper" folks work
for more to keep the old crufty code. Sure, they won't be happy.
Don't make the folks that are doing your leading-edge work more, and
don't require the new code be more gnarly and more twisty.
This is obviously a complete reversal of the longstanding practice,
which is why I don't expect it to happen.
Why reverse this practice? Hopefully, at least some of the folks with
the old source code that run into this then start to learn where to
update their code and how to update their code, and maybe to migrate to
and use your newer and better APIs, and to 64-bit native. This also to
give VSI a path to eventually deprecate and remove the worst of the old
code where that's appropriate; the worst of the old cruft and the
support headaches, that you and the other engineers would really like
to nuke and pave, but politically cannot. Certainly stay compatible
over the vast majority of the source code, but look for and select
specific areas of the compiler — 64-bit support, ptrdiff_t and size_t,
C11 support, whatever — and also specific areas of OpenVMS beyond the
compilers — the way-too-fast password hash, or LDAP integration — where
you can clean up the existing mess for future users, rather than
preserving it all into a museum of hackery for retired source code.
Move the need for the cruft and the conditionals from the new code to
the old code.
n.b: I am NOT suggestion deprecating everything, nor deprecating pieces
and parts at all arbitrarily, nor requiring arbitrary source code
changes. Specific and targeted areas such as improved security, or
that involve longstanding customer requests that have been blocked by
upward-compatibility requirements, or in areas that are making it
harder for VSI to move VMS forward. This with documentation and a
schedule and a migration plan for the existing customers, and
preferably with compiler or run-time warnings logged where that's
feasible.
TL;DR: Given a choice of a customer having to tweak some existing
source code to get to the new environment or over to OpenVMS on x86-64
(and maybe then updating it?), as compared with the effort and costs
involved in porting elsewhere, don't set the VSI "bar" too low here —
don't get too good at making OpenVMS source-compatible, while making
the future source code more hideous and more complex and more arcane.
Don't sell the future of OpenVMS OS and application development short.
Don't make future work harder.
--
Pure Personal Opinion | HoffmanLabs LLC
More information about the Info-vax
mailing list