Difference between hardware serial and software serial in Arduino

A hardware serial, as the name suggests, denotes that a dedicated piece of hardware (UART) enables Serial communication. In Arduino Uno, for instance, pins 0 and 1 have UART support,and they are connected to the USB via a USB-to-UART converter. That facilitates communication between your computer/laptop and the Arduino. While Arduino Uno has a single Hardware Serial, other boards like Mega have multiple. They are accessed using Serial,
Serial1, Serial2, and so on.

You can have a look at an example of using Multiple Hardware Serials by going to File → Examples → Communication → MultiSerial

Software serial is a library that replicates the hardware serial behavior on other digital pins of the Arduino, using (you guessed it) software. You can have more than one software serials running in parallel, with the limitation being that only one can receive data at a time.

The SoftwareSerial library is inbuilt from Arduino IDE 1.0 and above. To use it, all you need to include is −

#include <SoftwareSerial.h>

The other limitations (board specific) of SoftwareSerial library can be found here.

Speeds up to 115200 bps are possible using the SoftwareSerial library. You can find examples related to the usage of SoftwareSerial by going to File → Examples →SoftwareSerial