:D specifier is used exclusively for primitives (all primitives are initial
\<engine>_<name>:D), and ideas none should appear outside of the core team code. (Broadly that means outside of
l3kernel but there are some special cases where we expect
:D names to be used in limited places in other kernel-level code.)
However, it's clear that there are areas that the team have not yet covered in
expl3 or where interaction with LaTeX2e requires direct access to primitives. For interim work on modules where there are currently no official interfaces, the team recommend that code addressing such cases be formulated as
\cs_new_eq:NN \__module_name:w \engine_name:D % Probably :w ...
and the latter name is used in such places: this leaves only a single line to be adjusted as the team address such issues. It is also likely to be worth raising these with the team either directly on or LaTeX-L. For example, I am recently added support for
\pdffilesize and similar as experimental additions to
l3file as a result of such requests.
For working with LaTeX2e, where we might expect the code never to 'move on', one would usual stick to the 'classical' name.