This is an area where terms tend to be overloaded — the same term is used with different meanings depending on the context. It’s not helped by the fact that the meaning commonly associated with various terms changes over time, so the age of the texts you’re reading is important.
There are a number of aspects to distinguish, or at least, two main ones.
- User v. kernel threads can refer either to the execution context, or the management context. “Kernel threads” in Linux usually refers to the former: a kernel thread is a thread run in the kernel, for the kernel’s purposes (in
ps, you’ll see them as processes with names in square brackets, e.g.
- As mentioned in the SO answer, software v. hardware threads refers to the nature of the threads being discussed. In both cases, the concept of a thread is the idea of running multiple threads of execution in parallel. In the software sense, it’s a light-weight process; in the hardware sense, it’s a “light-weight” CPU (in Intel parlance, a hyperthread).
The “user threads” you’re referring to are typically known as green threads. They are software threads managed in userspace, with no kernel involvement. As with many concepts which are implemented in the kernel and in userspace, their use evolves over time as the perception of costs moves: in the past, and on other operating systems, threads weren’t well supported by the kernel, so they were implemented in user space; then kernels improved, and software started using kernel threads; then new environments considered kernel threads to be too expensive, and so it goes.
To answer your question, since user threads are software threads, the term “software threads” includes them.