Which is more secure using a CSPRNG for a One-time pad, or AES? In reading about the One-time pad it appears to need truly random key for the pad. Since true random values are not practical to generate this presents a problem (thus making One-time pad less practical). If instead I use the operating system provided CSPRNG to generate the key, is that any better than using AES in GCM mode?

Update: Just to be clear, a One-time pad cannot be done with a CSPRNG.
First of all, a terminology nit: please don't say &quot;a One-time-pad generated by a CSPRNG&quot;; a one-time pad must, by definition, be generated randomly, and an important part of its security proof is that it was generated randomly (and so an attacker cannot disqualify any potential pad, even if that attacker had infinite computational resources).  Exclusive-or'ing a CSPRNG output with the plaintext to form the ciphertext is a stream cipher; while it is a perfectly usable primitive, it isn't the primitive known as OTP.
In addition, if we use a stream cipher, we usually don't generate the entire key stream on one side, and send that to the other.  Instead, we usually send the key (initial CSPRNG state) from one side to the other; that drastically reduces the amount of keying material that needs to be sent, and is no less secure.
Now, with those nits done, the answer to your question (which is more secure, GCM or a secure stream cipher) depends on what you mean by &quot;secure&quot;.
If by &quot;secure&quot;, you mean privacy (that is, an eavesdropper cannot obtain any information of the encrypted message), well both GCM and secure stream ciphers are perfectly secure against real potential adversaries; on this score, they are even.
If by &quot;secure&quot;, you mean integrity (that is, someone in the middle that can intercept messages, and inject modified versions cannot fool the receiver into accepting a message that the sender did not send), well, classic stream ciphers run into a problem.  That's because stream ciphers are malleable; specifically, an attacker can flip a bit in the ciphertext. On decryption, the corresponding plaintext bit will be flipped (and thus an attacker who guesses what the plaintext is can modify the ciphertext so that it decrypts to whatever he wants).  This doesn't work with GCM; if the attacker modifies the ciphertext in any way, the integrity check within GCM will fail, and so the receiver will reject the message.  Yes, this means that an active attacker can cause messages to be rejected; an active attacker can do that in any case.
Now, there are standard constructions (such as a MAC) on top of the standard stream cipher apparatus which also provides integrity protection.  So, if we ask CSPRNG+MAC vs GCM, well, there isn't a great deal of difference from a security standpoint (but there may be practical differences, such as &quot;what happens if a message gets lost; do you need to handle that case?&quot;).