Linux doesn't have direct access to the hardware, nor to the crucial components of the system, thats one bad reason that doesnt help hi-def video or games but keeps the PS3 dead safe from custom sw, (keeping the angelina desktop on a Hi-Def-TV via a PS3 running linux mite be the big deal)
Article on a PS3 forum : author-cancech
What is Open Source?
This is something that you'll encournter as you use Linux. Open Source is an ideology that programs should be free, not only in binary (compiled executable) form so that people can use it, but the source for it as well so that people can see how it works, why it works, and modify it to fit their needs and share your changes with everyone else. The idea is that this way you can have people from all over the world working together to build an application because they want to. Because of this they're motivated to od a good job so the programmers tend to take more care in their work, produce better code and hence better working programs. Granted this doesn't always work, but that's the idea anyway. More people also provide input so the application can evolve based upon the needs and wants of the users, making the process (again in theory) more dynamic. The downside to all this is that no open source project is ever really finished, so whenever you download something then it's essentially a beta product. You'll find many applications which are very polished, easy to use and better then their closed source counterparts (ie: blender, xine, audacity, firefox, K3B,...). But then again open source devs tend to focus more on getting the functionality done before worrying about usability or appearance (ie: mplayer, DVD Styler,...) or they may not be as feature rich as their commercial counterpart (ie: Open Office). In anycase you can do all the same tasks with open source software as you can with closed source software.
What is closed source?
The other approach to program developement is closed source (ie: commercial). Here the idea is to make software in order to make money from it. You build an application and then sell it to people, and you the customer will never see the source for it. Here you can sometimes find people rushed to meet deadlines, andor working on a project which they don't really care all that much about, this leads to careless coding and possible problems. Design decisions are often based upon corporate needs, rather then what the end user may want (DRM anyone?) and in many cases what you see is what you get... unless you pay for an update to the new version. But then again in most cases when a product is released, then it is polished, stable, easy to get up and running and use. Since what most people care about is how well the end product works, then they won't care if the program has a horrible codebase. Another problem could be if you find a bug or problem of somesorts in a closed source application, then the only thing that you can do is report the problem and hope that the company decides to fix it. If this is an application that the company no longer is supporting, then you're out of luck. With open source you if you have the know how, then you can modify the code and fix the problem yourself (granted most people wouldn't do that... but you could
)
So that's a short run down of closed vs open source. Both have their advantages and disadvantages, and you can rest assured that neither is going to be going away anytime soon (if ever).
What is Linux?
Linux is an operating system and fullfills the same functions as Windows, Solaris, OSX,... etc. In a nutshell it allows for a convenient way of using, managing and handling the hardware in a computer. Linux differs from the others in one fundamental way, it's open source. As described above this mean that you can access the source, modify anything you want and you have fill control over customizing it. For example with Windows you're stuck with their UI... hell you can't even skin it without hacking it. In Linux you have a vast number of different UIs to choose from... you can just stick to the command line or you can install KDE, Gnome, Fluxbox, E17, XFCE,... your choice. A little back history... Linux was started by Linux Torvalds a Finish software engineer, and it's based upon the UNIX operating system (similarly to OSX). In todays days and age there's hundreds of various distrobutions of Linux available, some commercial some not. It's avaialbe for virtually every platform imaginable and it is supported by a lot of big names (ie: IBM, Novell, Red Hat, Dell,...). There are a lot of people working on the various aspects of the system and progress forward can be seen on a regular basis. Though predominantly used in server environments in recent years it has started making it's way to the desktop and it's greadually picking up and expanding (Dell is living proof of this). Because of it's open nature and adaptability it also has a different structure from other operating systems (such as Windows). Another difference because of this is that compared to Windows you also have to at time muck around with the OS and get your hands dirty. Want to install a new piece of hardware to your computer? You may need to recompile your kernel. Hooked up a second monitor? You will have to configure Xorg and and spend a little time editing it's config file. The only possible way of getting around this would be if you started using KDE or Gnome and stayed with it. Those two have lots of various tools built in tools (more so KDE), but chances are that their configuration changes won't carry over to other WMs (KDE to Gnome and vice versa). This is one of the problems with Linux, because of it's open nature and ability to modify anything and everything there's no unification. Every application tends to do it's own little thing making moving from one to the other somewhat painful. Thankfully they've started introducing desktop standards so this should become less of a problem in the future.
What is a distro?
A distro is how you go about installing Linux to your machine. It's a flavour of Linux, all distros built off the same core, but to a different end. This is because of the open nature of Linux. Different people wanted to have an OS focused on a different purpose, so they put together a distribution. For example YDL is focused on building a PPC only flavour of Linux, Ubuntu is trying to make a distribution which is as easy as possible to use, Gentoo wants to be as easily customizable as possible, Suse is designed for the corporate office (and server),... and so on. You also see distros which are based off of other distros. Generally this came about because someone really liked a certain distro, customized it and then wanted to share it with others. For example Kubuntu, Xubuntu, Edubuntu and Gobuntu are all based off of Ubuntu (if nothing else then the name is a dead give away) and they'll all esentially the same distro (Ubuntu) but setup slightly differently. Ubuntu comes with Gnome preinstalled, Kubuntu and Xubuntu come with KDE and XFCE preinstalled (respectively). Edubuntu is designed to for use in schools and Gobuntu is designed to be pure open source. What does this mean to you the end user? Well, this means that when you pick a distro which best fits your needs and use that as a starting point. You can then modify it and tweak it to your hearts content. If there's something that one distro does, then you can do it in another distro (albiet may not be all that easy). All distros are built using the same building blocks, have the same architecture and all of them are intercompatible (some tweaks may be required).
Linux components
At it's core you'll find the kernel. Every operating system has a kernel. It bridges the gap between the hardware and the software, this is where drivers are stored and where the operating system keeps information about how to access and use the hardware in the system. Contrary to Windows, Linux tries to keep it's kernel as small as possible. Drivers are in the kernel, everything else is a userspace program. See those fancy window managers you have? That's a normal program, it's built ontop of Xorg which is another normal program. In Windows both of these (well, their equivalents) are built directly into the kernel. Other things worth knowing are: Alsa is used for sound, CUPS for printing, crontab for scheduling tasks and udev for device management. With the exception of Alsa all of these are userspace programs (Alsa is built into the kernel). Due to it's flexible nature Linux isn't dependent on any of these components in order to work, they're just there to make your life using the system easier and to allow you to do more with it. I don't really want to go in depth about any specific components here, because you don't really need to know too much about these in order to use linux. If you want more information then just google it, there's going to be tons of information out there.
What can linux do on my PS3? Is it worth it?
Well there's lots of things that Linux can do on your PS3, it essentially turns it into a computer and allows you to do virtually anything that you can do on a computer. Rather then listing off what it can do, I'll just say what it can't do. As of right now the video card in the PS3 is locked off, this means that that you won't have any 3D acceleration. OpenGL won't work properly (if at all), DRI (direct rendering interface) will be unavailable and the more flashy bells and whistles (ie: Xgl/Beryl/Compiz) won't work either. There's only 256 MBs of RAM available (of which only 200MB or so seem to be accessible), this means that you won't be able to do too much multitasking or run any RAM intensive applications. Since this is Linux and not Windows, no Windows applications won't work. Well to be more accurate since this is a PPC system rather then a x86 (ie: Intel/AMD) system, then Wine and Cedega won't work, meaning you won't be able to trick Windows applications into running. The last limitation is that the Cell processor has been optimized for number crunching and Linux hasn't. While this means that Folding at Home works really well, Linux won't be breaking any speed records. Long story shou you'll be able to do anything you can, so long as you fit into the constraints that I just outlined. 2D non-opengl games will work (Battle of Wesnoth and SuperTux 0.1.x work really well), music and video (high def vids may chug), picture viewing and editing, writing/presentations/..etc, and web browsing will work (among other things). I wouldn't go so far as to say that this is a desktop replacement, but it'll work well as a extra PC and given some work I'm hoping that this will work as a HTPC. Is it worth it? Well that's going to be a personal prefference. It is worth it for me and many others, but maybe not for you. If you have no interest in any of the things that it can do, then it's probably not worth it to you. If you don't have the patience or will to learn more about Linux then don't bother installing. But if you've managed to read all the way to here, then I suspect that you've already made up your mind as to whether or not to give it a shot. In the end you don't really have anything to lose. Linux is free and it won't take more then a few hours to get up and running. Just backup your stuff from your PS3 (you will lose everything when you format to allocate space to Linux) and off you go.
Frequently asked questions
Here's a few things that I've learnt while using Linux which might come in hand to you. Some of this is probably going to be common sense, something you'll probably know already, something are things which will hopefully make your life a little easier in Linux.
1) Root vs non-root
Linux was designed from the ground up to be multiuser. There is a very clear distinction between user and root and keeping the two seperate is important. root is the system administrator and every linux distro will have it (yes even Ubuntu though they try to "hide" it by using sudo). root can do absolutely anything on your system. Create users, delete users, install system wide applications,...etc. There is no restriction as to what root can do, to the point where root can very easily and effefctively destabalize and essentially destroy a system (software-wise). Because of the power that root has it's important that you use root as little as possible (you accidentaly ran rm -rf /* as root?... oops...). To this end you have normal users. Normal users have only limited access, generally only within their home directory. The home directory is traditionally in /home/username, but that's just a guideline not a rule. To quickly access into your home directory you can do one of two things. The command "cd" is used to change directories on the command line "cd /somedir" will move you to /somedir. If you run it without any parameter "cd" then that will move you to your home directory. Another fast way of accessing it is by using a "~" place holder. "~" is hardwired to your home directory, so running "cd ~/somedir" will move you into "/home/username/somedir".
2) Autocomplete and spaces
Hitting tab while on the command line will autocomplete. If you're trying to type in the command (ie: the first word) then it'll try to autocomplete the command. Hitting tab once will autocomplete if there's only one option available, if there's more then one option hitting tab twice ("double tap" the key) will generate a list of all possible completions. If you already have the command written and try hitting autocomplete for the parameter, then it'll try to autocomplete in the directory heirarchy. Behaviour stays the same. If you have a file or folder with spaces in the name (ie: "file with space.txt"
, then Linux won't know how to handle the spaces correctly. As far as linux is concerned then a space signifies that a new file/parameter is being started. To work around this you have to use an escape character. So trying to list of what "file with space.txt" contains you could try to do "cat file with space.txt" but linux would interpret that as you trying to cat three seperate files "file" and "with" and "space.txt", to tell it that it's actually just one file and to ignore the spaces you use the "\" escape character "cat file\ with\ space.txt".
3) Keyboardless copy paste
Those of you who are used to windows probably know that the only way to copy something is by putting it into the clipboard (hightlight, CTRL+V, select new destination, CTRL+P). That will work in Linux as well, but you also can do it without using the clipboard. When you highlight something then Linux automatically "copy it". In order to paste this you middle click into your target destination (simultaneous right and left button click works as well to paste). This way you can really copy and paste two things at the same time. This also comes in handy when in a terminal which doesn't support "traditional" copy pasting. NOTE: only the last thing highlighted is stored so after highlighing what you want to copy make sure that you don't hightlight anything else before pasting.
3) Maximize to width and height
Ever wanted to be able to maximize a window but only it's height or width, but not both? With Linux you can (NOTE: this won't work in Gnome in Ubuntu... might work in Gnome in general). Left clicking the maximize button with maximize it to the full screen, right click the maximize button and it'll maximize to the screens witdh, middle click to the screens height.
4) Find out how a program is used
Linux is kind enough to include built in documentation for more or less all programs that come with it (NOTE: it's upto the program to supply the documentation, so if it's not there blame the program not linux), this documentation also includes information on virtually all C functions. Type in "man program" and it'll find and open the available documentation for program. If there's no documentation for it, then it'll say so. To use the documentation that opens up use the up/down keys to scroll and if you want to search for something specific then hit "/", type what you want to search for and hit enter. It'll find the string you typed in. To search again for the same string hit "/" and enter (don't supply a string). To exit the documentation hit "q".
5) Kill a frozen application
As great as linux is, then applications will freeze every once in a while. There are a number of ways how to kill applications. If it's a gui application and there's a window for you to click on then you can use xkill. Just run "xkill" your cursor will turn into a skull and the next thing you click on will be terminated. Another thing that you can do, if you know the exact name of the application (well, the name of the process in which the application is running... normally it's one and the same) is use killall. Run "killall program" and it'll tell program to terminate. Very often that'll work, but sometimes the program is stuborn and won't die from this, so you have to force it to die "killall -9 program". If you don't have a gui, and you don't know what the exact name of the program is (sometimes it's not that easy to find out, for example aMSN runs as wish and I've seen firefox as both firefox-bin and mozilla-firefox) then you'll have to find it. To this affect you can search what processes are running "ps -aux | grep program". ps -aux will list the programs "|" will redirect the output of ps to grep, and "grep" will search the list for occurances of "program" and list the line with it. You'll get as a result a list where each line looks like this "username #####(PID) 0.0 2.8 28836 26208 ? S 09:55 0:06 process-name executable". Find the application that you want to terminate in the list, and then run "kill #####" where ##### is the PID (process ID). Again if it's being stuborn run "kill -9 #####". NOTE: killall will kill all processes which match, so for example "killall java" will kill all java applications, so if you have 4 java applications running all four will be killed even though you only wanted to kill one (this generally isn't that big of an issue). Also some applications make use of multiple processes, so when using kill you may have to kill multiple processes before the application finally dies.
6) Program settings
When you install a program system-wide you have to be root. If you try to run it as a normal user, then in most likely hood that user won't have access to write to the location where the program is installed to, not to mention that if more then one person is using the computer then more then each is probably going to want to have different settings. To make this possible all settings (practically guarenteed) are going to be stored within your home directory as hidden files and folders. In order to make a file and folder hidden you have to start it's name with a "." (period). When it's hidden in this way then it will still be fully accesible, but if you list the contents of the directory (ls) then it won't show up unless you tell it to show all (ls -a). Try it out, go to your home directory (cd ~) and compare what "ls" and "ls -a" show you. I can guarentee that "ls -a" will show you a lot more things. Rule of thumb is that a program stores it's settings in ~/.program or ~/.program/ if it needs more then one file. The benefit of doing this is that not only can each user have different settings for each program, but you can also edit settings without actually starting the application (assuming that the application permits this). Most open source programs just store their settings as normal text files, so it's very easily editable (some programs don't have configuration options within the application itself so you have to configure it by editing the file directly). Also if you manage to mess up the configuration and/or just want to restore everything to defaults then just delete the settings file or folder. Next time you launch the program, then it's going to be the first time the program was launched... as far as the program is concerned.
7) RAM vs Swap? More Swap = better performace?
RAM is the primary system memory. This is where the system caches data, so that it can have easier and faster access to it. As it is right now Linux has only 256MB of ram available to it, which is a pityful amount. When Linux runs out of physical memory, then it'll resort to using Swap. Swap is a section of the hard disk set aside specifically to augment physical memory. It's an overload buffer of sorts. A failsafe to keep the system running incase you ask too much from it and it is recommended that it be about half the size of your RAM. Increasing the amount of Swap means essentially that you can have more things open before Linux starts complaining (and possibly failing or killing apps at "random" ). Increasing the amount of Swap will NOT improve performance. Just look at the numbers the XDR RAM in the PS3 has a access speed of roughly 10GB/s (or so I hear) normal HDD has an access speed of roughly 80MB/s (same goes for USB 2.0 so putting it on a USB stick won't help you). When Linux resorts to Swap you WILL feel it. If/when that happens then it's a sign that you just have too many things open, the PS3 just wasn't designed for multitasking...
8) Where to go to find out about distros?
Best place where to find Linux distros? Well for just general information I'd probably start at distrowatch. But if you want more detailed info I'd go to the distros website. As for downloading it, then again I'd just go to the distros website. They tend to have direct download links at various mirrors and torrents as well. I'd just say pick a mirror which is somewhere nearby, and then hope for the best. If you find that it's too slow, try another mirror, or the torrent. Generally torrent downloads work fairly well.
9) Is it possible to access a networked HDD?
Yes it is. Going Linux to Linux you need to export the directoy on the source machine (NFS server has to be installed), and then mount just mount it on the target machine (you need to have nfs utilities install on the target machine)... as root "mount xxx.xxx.xxx.xxx:/where/the/source/dir/is /target/dir". For Windows to Linux you need to use Samba.
10) How do you get the resolution higher?
You have to edit /etc/kboot.conf. By default this file should have something like (going by memory so please forgive any inaccuracies):
default=linux
linux= *something* quiet splash
linux.old= *something* quiet splash
You have to change it to something along the lines of
default=linux
linux= *something* video=ps3fb:mode:# quiet splash
linux.old= *something* video=ps3fb:mode:# quiet splash
# is a number depending on your TV and what res you want it to display in
1 = 480i
2 = 480p
3 = 720p
4 = 1080i
5 = 1080p
This will make it so that you have the resolution which is associated with that standard, but it'll also most likely display in a box (ie: not full screen). To make it so that it's full screen add 128 to the value, but (if you're like me) you'll get it so that the screen size is bigger then what the TV can handle. I believe that if you TV can handle overscan then it will display as proper fullscreen, if not then it'll be rendered as bigger then the TV screen.
11) What does Linux look like?
Well, you can make it look as more or less anything you like, but here's a few screenshots from YDL running E17 (default skin) on a SDTV - thanks Killroy!!


12) Flash in Linux?
Macromedia has released a flash player for Linux, but only for x86. As of yet there is no official flash player for PPC, and chances are that that won't change. They haven't seen a reason why to release one so far, so I can't imagine them deciding to now. But not all hope is lost. There are two open source projects out there which are trying to bridge this gap and bring an open source flash player which will work on PPC. They are swfdec and Gnash. both are still young and under heavy development and won't do everything that the real flash player will do, but they're showing a lot of promise. Both also claim to be able to play youtube videos. For more information please take a look at this thread.
13) Is Linux slow?
Linux on the PS3 is slower then on a PC, but that mainly depends on what you're trying to do. Somethings are fine, others a little slugish, and something are very slow. For the most part so long as you're not doing anything which uses opengl and you don't run out of ram then it'll run smoothly... you'll notice that it's a little slower, but not enough to be a problem.
14) How to configure hotkeys?
Pretty much all the WMs (Gnome, KDE, Fluxbox, E17 check in the config panel... something should be there) have builtin ways of configuring hotkeys, you just have to know how to do it. The only downside of configuring hotkeys this way, is that they don't transfer from one WM to another. This might not be an issue for most people, but if you like mixing up your WMs then this could be annoying. Granted some hotkeys won't transfer no matter what you do, but this only applied to hotkeys for doing WM specific things (ie: change desktop, close window,...etc). If you want to use your hotkeys to launch applications then using a more generic approach could come in handy when you switch to a different WM. The generic approach is through xbindkeys. xbindkeys is a nifty application which allows you to specify an action to take place when mouse button or key (or combination thereof) is pressed. Read here for more information.
15) How do you uninstall Linux?
Linux is an operating system, and as such the only way to uninstall it is to format the drive. If you want to try installing a different distro, then installing the new distros bootloader should be enough in order to start the installation. If you want to get rid of Linux completely then you will have to format the drive. This shouldn't realy come as much of a shock... I mean have you ever seen a distro with an uninstall feature? Besides you're going to want to reformat the drive to reclaim the space as well.
16) What peripherals will work?
Any peripherals which normally work under Linux and can be plugged in via USB will work. This means stuff such as webcams, printers, headsets and other things that I can't think of. Some things will work via plug & play, others may require more effort to get working. This is a fully functional Linux system... if Linux can do it, so can Linux on the PS3.
17) Will Linux void my warranty or harm my PS3?
No, installing Linux will not void your waranty. Sony has provided some instructions on their website, they have contracted (not sure what their relationship actually is) Terrasoft to make YDL work on the PS3, and there's even options for other os listed there under System Settings on the XMB. Installing Linux won't harm your PS3 either. Linux doesn't have direct access to the hardware, nor to the crucial components of the system. The XMB is stored in a seperate and safe location. No matter what you do in or with Linux you won't brick your system, and you won't do anything to hinder the usage of the PS3 itself.
18) How much space with Linux use up?
Since you first have to partition your drive in order then however big you make your partition, then that's how much space Linux will use. The way things are done now, then you can either give Linux 10GB or total-size-of-disk - 10GB (ie: 50GB in a stock 60GB PS3). So that's how much disk space you'll lose in the XMB. Regardless of how big you make the partition, then both YDL and Ubuntu will install using roughly 2GB of space.
19) How does the file system work?
Contrary to Windows, Linux doesn't have the concept of a disk. There is no distinction between hard drive, usb key, cd, network drive, partition... etc. In the OS they all look, behave and are treated the same... like file systems. There is a root "/" within which everything is contained and everything located within "/" is a drive of somesorts. In order to access a drive you have to mount it, for this you need a mount point. A mount point is a folder in the file system where you attach the contents of a drive. Normally to keep things organized the mount points are in a single location (I like to use /mnt) and are labeled based upon their source (ie: /mnt/usb_key). But any location in the filesystem will do. You can even mount a drive "within" a drive, for example you can mount a usb key to /mnt/usb_key and then a cd into /mnt/usb_key/cdrom so long as that mount point exists (ie: folder). Linux doesn't care, if it's a storage medium then all the system cares about is the file system within it. When you want to detach a drive from the file system you unmount it. You won't be able to unmount the drive if something is accessing the contents of the drive. To see what drives are mounted and what their mount point is run "df" (for full usage check it's man page).
20) File permissions and ownership
Every file and folder in your system belongs to someone and to a group. Based upon this permissions are granted. Permission are split into three categories: what the owner can do, what the group can do, and what anyone else can do. There are three types of permissions - read, write, execute. Read governs whether or not the contents of the file can be seen, write whether or not the file can be modified and execute whether the file can be executed. Ownership is changed using the command "chown" and permissions changed using "chmod".
21) How to configure wireless in YDL?
In 5.0.1 (I assume it'll be the same in 5.0.2) go Main Menu (blue ball in toolbar) -> Applications -> Applications -> Accessories -> System Tools -> System Config -> Network (Network confugiration). Or as root you can run "system-config-network". Here you'll see device listed (eth0) which is inactive and which represents the wireless card. Highlight it and click Edit, and fill in the information (SSID, key) based upon what your network is like. Hit OK, and then in the main window click Activate. Assuming you did everything correctly no error will be thrown, and you'll be online.
22) How to get wireless in Ubuntu?
Paraphrasing from this.
i) download this file on a computer, put it on a usb key and copy it over onto your PS3. If you have a prefered way of transfering file then use that method.
ii) open a terminal and go to the directory where you put the file (cd /location/to/file/you/copied/over). If you just put it onto the desktop then "cd ~/Desktop" should do the trick
iii) run this command "sudo dpkg -i *.deb" and enter your password when prompted
iv) Go into /boot (cd /boot) and check to make sure that everything is there (ls -l). You should see that vmlinux is pointing to linux-image-2.6.22-rc2_2.6.22-rc2-10.00.Custom_powerpc or something like that.
v) Due to an issue with the updater trying to revert back to the default kernel run the following two commands: "sudo cp vmlinux vmlinux-wifi" and "sudo cp initrd.img initrd.img-wifi". That'll make a backup of the new kernel with a easily remembered name.
vi) Edit kboot.conf: you'll see a line there (assuming you haven't edited already) which looks like this:
linux='/boot/vmlinux initrd=/boot/initrd.img root=/dev/sda1 quiet splash'
change it so that it looks like this (changes are in bold and VERY important... there's 3 in total)
linux='/boot/vmlinux-wifi initrd=/boot/initrd.img-wifi root=/dev/ps3da1 quiet splash'
vii) reboot the machine (sudo reboot)
If all goes well, then when the machine reboots, you'll have the new kernel running without any problems. If there is an issue then boot using "old" (or linux.old... can't remember) at the kboot prompt to boot into the default kernel and double check to make sure that everything is ok. Once you're booted using the new kernel and everything is working fine (as in you can login and get the screen working), then you can connect via wireless. In the top right corner there's a network icon, so right click that and go manual at which point the network settings screen will popup. Click on the wireless connection (first one) then properties, and make sure that the values there correspond with your network settings. Once that's done click the wireless connection and then activate. You should now be online.
23) Why won't my CD/DVDs eject?
In windows how it works, is that if you hit eject when there's a CD/DVD in the drive it'll automatically eject it and if any application was using it, then too bad. In Linux if you try an eject a disk you have to first unmount it (Windows must do the same, but it's hidden away so you never really see this happen). Before you can unmount a CD in Linux, then it can't be in use. So if you put in a cd, and then say open a text file which was there, you won't be able to eject it or unmount it so long as an application is using that text file.
Hopefully this is going to be of some use to someone. If you have any questions or comments then let me know. I've tried to make this as straight forward and understandable as possible, but if something doesn't quite make sense then I'll see if I can fix it. And to those that choose to put Linux on their PS3, good luck and have fun