How to tell people why packages become deprecated and shouldn't be used anymore?
A major motivation for the design of TeX originally and also of LaTeX is document stability, you should be able to get a 20 year old LaTeX document and still process it. To get absolute guaranteed stability you need to archive the whole system executables, fonts, etc, but for the vast majority of cases that is not necessary and an old LaTeX document will run without change on a new system.
You see this in packages like fixltx2e
which is distributed as part of the base LaTeX distribution. It implements a bunch of unrelated usability improvements to LaTeX which would be just directly incorporated into the code were it not for the compatibility requirements.
Note there is no such thing as a compatible change in a system like LaTeX that exposes its implementation at the user level. If you make any change to any command, some document somewhere will break. If you just add \relax
or remove a spurious {}
group or add a %
to the end of a line in a place where space token can not do any harm, the operational behaviour of the modified command may be identical, but someone somewhere, will be using patch package (or just direct manipulation with delimited arguments) that is patching that command in a way that assumed the third token in its definition is \halign
(or whatever) and the patch fails if that becomes the fourth token. Or perhaps the document is using \checkcommand
and intentionally throws an error if the original command changes in any way.
So often when things change it is better to change the package name and put things in a new package, even if you are the maintainer of the original package and so could make the update in place. This means that old documents are unchanged. It does mean you have to at least partially support two versions of the code forever though.
Sometimes packages get effectively replaced by other people. enumerate
and color
for example are part of the core LaTeX distribution. You may see answers on this site suggesting they are replaced by say enumitem
and xcolor
but those packages are contributed extensions not part of the core release. That is a less important distinction than it used to be now most people use a tex distribution such as texlive or miktex as that handles package updating in a consistent manner whatever the original source. The names of those packages are different partly because they have different authors and are maintained separately, but as noted above even if the same maintainer were involved probably new packages would be called for so that the old interfaces remained the same.
Even if the command structure is identical, updating a package can be difficult, there are some reported instances of longtable
making an allegedly suboptimal page breaking choice. Code to modify the decision making could be added but not without changing the page breaking in many existing documents which isn't really acceptable. Even if a new version is better in some way, if an existing document has forced page breaks to overcome a limitation in the old algorithm then the page breaking changes, a document could easily be left with pages that are empty or just with a couple of rows of a table. (In that case probably a package option to opt-in to the new features might be the thing to do.)
A couple of times I have tried to force a package deprecation by asking ctan maintains to remove the package from distribution. It doesn't really work: if you have a document archive of thousands of historical documents you don't really want to be going through them all to see if they use the old deprecated package and updating them to use the new one. It is simpler (and perfectly reasonable) just to complain and get the package put back (or to maintain a local copy of it).
Additional to the other answers I would remark:
A very good resource to learn which packages are obsolete is l2tabu – Obsolete packages and commands (German original version) or l2tabu in English (Thanks @ari-brodsky) which shows which packages should not used any more and gives alternativies.
I suggest to tell all your students to check this document before and while writing own documents, especially when they are using code of someone else ...
TeX has been around from quite some time now and the number of documents built over time is, well, rather large. Some of these older documents relied on functionality built in these obsolete packages. When creating a new package that reproduce the functionality of an older one, the choice is then whether you can make it backward compatible or not (same commands, exact same output,...). This is not always possible or desirable. The solution becomes then to leave to old package as is for backward compatibility reasons and build a new one that should preferably be used for newer documents.
Another reason why parallel development of packages can occur is when a new package is created for a (slightly) different reason, but with new features added, starts doing things better and therefore becomes the de facto package for a specific function, rendering the old one obsolete.