Scouring the internet about the difference between a login shell and a non-login shell, it turns out that the ultimate difference is merely the files that are being sourced. A login shell sources some files, and a non-login shell sources some different files.
So that’s the definition. But then, so what? What is the main point or idea why there is a login shell and why there is a non-login shell? What can you do in a login shell that you cannot do in a non-login shell and vice versa?
The way I see it is that the purpose of a login shell is to let users customize their shell environment, while the purpose of a non-login shell is to have like a “default” uncustomized shell environment. Pretty much like the idea of having “user preference”. Is this correct?