What a desktop environment is on modern Linux
Recently I read KDE Plasma is NOT a Desktop Environment (via), which maintains that it's more like an environment construction kit, out of which one could build multiple environments. I have some reactions to this, and also I have some opinions on what a desktop environment even is on a modern Linux system (opinions which may count as a bit heretical).
The classical Unix vision of a desktop environment is that it's basically a window manager and a suite of graphical applications built around a common look and feel, usually using a common GUI library/toolkit. These GUI applications will usually include a file manager and often include various other productivity applications. Although you sort of have this in GNOME and KDE, this is not really what a desktop environment needs to do today on Linux.
On modern Linux, a usable graphical experience has a lot of moving parts, many of which the person using it expects to manage through a GUI. It needs things like an audio system, a system to handle removable media, widgets to log out, lock the screen, and reboot the system, integration with network management, a central preferences management system that applies to all of 'its' applications and really wants to ripple through to applications using other toolkits, and the ability to handle things like additional screens showing up or people wanting to change the screen resolution (which you need to auto-detect). As it happens, there are relatively well defined systems to handle many of these jobs (and more), and often relatively well defined means of talking to them through D-Bus.
(For instance, the modern Linux audio experience is mostly based on PipeWire, at least at the moment.)
A modern desktop environment is something that supplies and integrates all of those pieces and moving parts to provide an experience where everything 'just works', where audio plays when you want it to and you have an on-screen volume slider, where you can click on a widget to control your VPN (or get the ability to configure a new one), and so on. It probably comes with some applications of its own to, for example, handle its preferences system and things like window management keyboard shortcuts, but many applications that would previously have been considered part of the desktop environment are outsourced now. Almost everyone is going to use LibreOffice and either Firefox or Chrome, for example, and there is broadly no need to reimplement things like a terminal emulator (although a desktop can if it wants to).
You can of course build such a desktop environment yourself, with sufficient work. There are window managers, taskbars, status bars, applets, launchers, things to parse .desktop files to create nice launcher menus, and so on and so forth, and you can assemble them into a working configuration. But there is an exhaustingly large amount of work (and it keeps churning), so at a certain point most people give up doing it themselves, as I did when I started using Cinnamon on my laptop. A modern Linux desktop environment is a system integrator; it collects all of the pieces and connects them up so that you don't have to learn how to do it yourself (and then find or write programs that do the work).
For historical reasons, the two largest such integrators (GNOME and KDE) come with their own GUI look and feel, implemented by their own toolkits, and a variety of core and third party applications that use their toolkits and thus their look and feel. But this is not essential. Cinnamon reuses a lot of GNOME pieces, while XFCE has a relatively modest set of applications and while it has its own toolkit, I don't think it's widely used by third party programs. But XFCE is still a full scale modern desktop environment, because it does all of that hard integration work for you, and you can just use it.
(As far as I know no one has attempted to write down in one place (or maintain a set of links to) everything that you need to support, connect together, run as part of your session, send D-Bus messages to, listen to D-Bus messages from, and so on. Even if someone managed that heroic feat, keeping it up to date would be an ongoing job, never mind trying to suggest programs and configurations to implement it all.)