I've been researching about how bash works, and so far I've learned the following things:

When starting a login shell, the first of the following files that exists gets executed:

`~/.bash_profile`, `~/.bash_login`, `~/.profile`

When starting a non-login shell (or a sub-shell) that is interactive, the ~/.bashrc file gets executed. 

Also, .profile gets executed by other shells like sh. My question now is, what is the point of having a .bash_profile as well as a .bash_login? They both perform the same functions, and unlike .profile, both .bash_profile and .bash_login are both only read by bash. The only difference that I know between them is that .bash_login gets executed if .bash_profile is not present. So why is it there?