33 30 bytes
I'm giving two versions here, just to demonstrate the lang. Integers and memory in UberGenes are bounded only by computer memory, so both versions meet the "forever" requirement. This first one is for score:
It prints numbers in unary separated by '=' characters. Explanation (indents indicate a loop start):
=ii NOP +a1 INC a (initially 0) =pa COPY a INTO p =q5 SET q=5 so it points to '1' =bi SET b to this location (15) -p1 DEC p =oQ OUTPUT '1' :bp JUMP to b's location while p>0 =oI OUTPUT the contents of this location ('=') =i0 JUMP to the beginning of main loop.
The second version is more interesting (66 bytes):
It prints the numbers in decimal separated by NULLs.
How it works (indents indicate a loop start):
=ii NOP +a1 INC a (initially 0) =l0-l2 SET l=-2 =pa COPY a INTO p =z8*z6 SET z=48 ('0') =t5*t2 SET t=10 =bi SET b to this location (27) =qp COPY p INTO q %qt MOD q BY 10 +qz ADD 48 to q (turn it into character) =Lq PUT q AT MEM[l] -l1 DEC l /pt DIVIDE p by 10 :bp JUMP back to b's location if p>0 =bi SET b to this location (51) =oL OUTPUT the character in MEM[l] +l1 INC l :bL JUMP back to b's location if MEM[l]>0 =i0 JUMP back to beginning of main loop