Long technical IRC conversation

It’s been a long time ago since I took part in a technical IRC conversation. Today, a few core community members of the Apache MINA project got together in the IRC channel and discussed about providing a way to build an extremely high performance network applicatiion by providing means for zero-copy (close to zero copy to be strict). The discussion progressed purely from technical viewpoint and it was therefore a lot of pleasure for all of us.

Now, what’s remaining is to excute the agreed changes in a branch, review it and merge it back to the trunk. I think coding should be the easist part considering the length of the conversation we had today. ๐Ÿ™‚

I was recently very sceptical about and fed up with too long conversation without quick action, but today’s conversation was an exciting experience all thanks to the participients – Emmanuel, Julien and David. Thanks guys, and I hope my proposal will satisfy all of you!

๊ทธ ๋‹ค์Œ์€ ๋ฌด์—‡์ด ๋˜์–ด์•ผ ์ข‹์„๊นŒ?

Update: ์•„์ง์€ ์กฐ์‹ฌ์Šค๋Ÿฝ์ง€๋งŒ, ์˜์™ธ๋กœ ์˜คํ•ด๊ฐ€ ์ž˜ ํ’€๋ ค ๊ณ„์†ํ•ด์„œ ๋ฏธ๋‚˜ ํ”„๋กœ์ ํŠธ์— ๊ณตํ—Œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ๊ธฐ์ˆ ์ ์ธ ๋…ผ์˜์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•ด ๋ด…๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ด์   ๋ฌด์—‡์ด ๋˜์–ด์•ผ ์ข‹์„ ์ง€๋Š” ์ƒ๊ฐํ•ด ๋ณผ๋งŒํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ๊ฐ€ ์‹ถ์Šต๋‹ˆ๋‹ค.

์„ธ์ƒ์—” ์›์น˜ ์•Š๊ฒŒ ์„œ๋กœ๋ฅผ ์ƒ์ฒ˜์ž…ํžˆ๋Š” ์ผ์ด ๋งŽ์ด ์ƒ๊ธด๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚˜ ๊ทธ ๋ชจ๋“  ์ผ๋“ค์— ๋Œ€ํ•œ ๊ธฐ์–ต์ด ํฌ๋ฏธํ•ด์งˆ ๋•Œ๊ฐ€ ์˜ค๊ธฐ๋งŒ์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๋˜๋Š” ๊ทธ ์‚ฌ๋žŒ์„ ๋‹ค์‹œ๋Š” ๋งˆ์ฃผ์น˜์ง€ ์•Š๊ธธ ๋นŒ๊ฑฐ๋‚˜.

์ง€๋‚œ ๋ช‡ ๊ฐœ์›” ๋™์•ˆ ํŠน์ • ํ•œ๋‘ ์‚ฌ๋žŒ๊ณผ ์•„ํŒŒ์น˜ ๋ฏธ๋‚˜ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์œ„์›ํšŒ ๋‚ด๋ถ€์—์„œ ๋‹ค์–‘ํ•œ ๊ฐˆ๋“ฑ์ด ์žˆ์—ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์ˆ™๊ณ  ๋์— ๋ฏธ๋‚˜ ํ”„๋กœ์ ํŠธ์— ๋” ์ด์ƒ ์ฐธ์—ฌํ•˜์ง€ ์•Š๊ธฐ๋กœ ๋งˆ์Œ๋จน์—ˆ๋‹ค. 4๋…„์ด๋ผ๋Š” ์‹œ๊ฐ„ ๋™์•ˆ ๊ณต๋“ค์—ฌ ์Œ“์•„ ์˜จ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•œ ์ˆœ๊ฐ„์— ๋– ๋‚œ๋‹ค๋Š” ๊ฒƒ์ด ์–ด์ฉŒ๋ฉด ์„ฃ๋ถ€๋ฅธ ํŒ๋‹จ์ผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์ด์ œ๋Š” ์ข€ ๋‹ค๋ฅธ ๋ญ”๊ฐ€๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ ๋•Œ๊ฐ€ ์˜จ ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€ ์ƒ๊ฐ์ด ๋“ ๋‹ค.

๋ฌผ๋ก  ๊ทธ ๋‹ค๋ฅธ ๋ญ”๊ฐ€๋Š” ์•„๋งˆ ๋ฏธ๋‚˜๊ฐ€ ๊ฐ€์ง„ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ ์„ ํ•ด์†Œํ•œ ๋„คํŠธ์›Œํฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ ํ…Œ๋‹ˆ, ‘๋‹ค๋ฅด๋‹ค’ ๋ผ๋Š” ๋ง์€ ์–ด์šธ๋ฆฌ์ง€ ์•Š์„์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ํ•˜์ง€๋งŒ ๊ธด ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๊ทผ๋ณธ์ ์ธ ๋ถ€๋ถ„์—์„œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์–ด์ฉŒ๋ฉด ๋œ ํ”ผ๊ณคํ•œ ๋ฐฉ๋ฒ•์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.

๋…์žฌ๋ฅผ ์˜นํ˜ธํ•˜๊ณ  ์‹ถ์ง„ ์•Š๋‹ค. ํ•˜์ง€๋งŒ ๋ฏผ์ฃผ์ฃผ์˜๋Š” ๋•Œ๋•Œ๋กœ ๋„ˆ๋ฌด๋‚˜ ํ”ผ๊ณคํ•˜๋‹ค. ๋ฌผ๋ก  ๊ทธ๋“ค์—๊ฒ ๋ช…๋ฐฑํ•˜๊ฒŒ ๋Š๊ปด์ง€๊ฒ ์ง€๋งŒ, ์ด๋ฒˆ ์ผ์ด ๋‚ด ์ž˜๋ชป์ธ์ง€ ๊ทธ๋“ค์˜ ์ž˜๋ชป์ธ์ง€๋Š” ๋ชจํ˜ธํ•˜๋‹ค. ๋‚ด์„ฑ์ ์ธ ์„ฑ๊ฒฉ ํƒ“์— ์•„์ง ํ˜‘์—… ๋Šฅ๋ ฅ์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๊ผญ ๊ทธ๋ ‡๋‹ค๊ธฐ ๋ณด๋‹ค๋„, ๊ทธ์ € ์˜์š•์ ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”์ง„ํ•˜๊ณ ์ž ํ•˜๋Š” ์‹œ๋„๊ฐ€ ๊ณ„์†ํ•ด์„œ ๊ณต๊ฒฉ๋‹นํ•  ๋•Œ ๋‚˜๋Š” ๋ถ„๋…ธ๋ฅผ ๋Š๋‚€๋‹ค, ๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๊ฒŒ ๋งž๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ˆœ์ˆ˜ํ•œ ๊ธฐ์ˆ ์  ํ˜‘์—…์€ ์ฆ๊ฒ๋‹ค. ๋ฏธ๋‚˜๋ฅผ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ธฐ๋ปค๋˜ ์ˆœ๊ฐ„๋“ค์€ ๊ทธ๋Ÿฐ ๊ธฐ์ˆ ์  ํ˜‘์—…์„ ํ†ตํ•œ ๋” ๋†’์€ ์ˆ˜์ค€์œผ๋กœ์˜ ํ–ฅ์ƒ๊ณผ ์„œ๋กœ๋ฅผ ํ–ฅํ•œ ์ธ์ •์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋Š ํ•œ ์ชฝ์ด ๊ทธ ์™ธ์˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฐ•์š”ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ์„œ๋กœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ์ •์ ์œผ๋กœ ํ•ด์„ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋’ค๋กœ๋Š” ๊ทธ ์ฆ๊ฑฐ์›€์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋˜์–ด๋ฒ„๋ ธ๋‹ค. ๋‚˜๋Š” ๊ทธ ์ฆ๊ฑฐ์›€์„ ๋‹ค์‹œ ๋Š๋ผ๊ณ  ์‹ถ๋‹ค. ํ•˜์ง€๋งŒ ๋ฏธ๋‚˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด์ œ ์•„๋‹ˆ๋‹ค.

ํ•œํŽธ์œผ๋กœ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์ง€๋‚˜์น˜๊ฒŒ ๋นจ๋ฆฌ ์•ผ์‹ฌ๊ฐ€์ฒ˜๋Ÿผ ๋‹ฌ๋ ค์™”๊ธฐ ๋•Œ๋ฌธ์€ ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค. ์•„ํŒŒ์น˜ ์ปค๋ฏธํ„ฐ, ํƒ‘๋ ˆ๋ฒจ ํ”„๋กœ์ ํŠธ ์Šน๊ฒฉ, ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์œ„์›ํšŒ ์˜์žฅ, ๋ฉค๋ฒ„, ๊ทธ๋ฆฌ๊ณ  ํ’€ ํƒ€์ž„ ์˜คํ”ˆ ์†Œ์Šค ๊ฐœ๋ฐœ์ž. ๊ทธ ๋‹ค์Œ์€ ๋ฌด์—‡์ด ๋˜์–ด์•ผ ์ข‹์„๊นŒ? ๊ณฐ๊ณฐํžˆ ์ƒ๊ฐํ•ด ๋ณผ ์‹œ๊ฐ„์ด๋‹ค.

PS: ํ•œ๊ตญ์ธ์— ๋Œ€ํ•œ ๋ฏธ๋‚˜ ์ง€์›์€ ๋‹น๋ถ„๊ฐ„ ๊ณ„์† ํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ ์ง์ ‘ ๋ฉ”์ผ ์ฃผ์‹ญ์‹œ์˜ค.

Changing the default sound card automatically in Linux

Many people including me usually use a USB sound card or a USB speaker to enjoy noise-free high-fidelity sound. I simply don’t understand why all the main board manufacturers ship with a built-in sound chipset which just sucks. It’s not an exception for all laptops.

In a non-portable system such as a desktop PC, you usually don’t need to change your default sound card because your USB sound card is always connected. However, it’s a whole different story for a laptop computer. USB sound card is often disconnected and connected again. For example, I connected my USB speaker to the docking station. The expected behaviour is that the default sound card is chosen automatically – the sound system should be reconfigured so that my USB speaker becomes the default sound card when I dock to the docking station.

Currently, there’s no desktop environment that addresses this problem AFAIK, so I wrote a quick and dirty script file that reconfigures the sound system automatically when a new sound card is detected. The script assumes that you are running HAL and DBUS, which are very common in modern Linux distributions.

#!/bin/sh
# Path: /usr/local/bin/alsa-watch

# Exit if running already.
if [ "x`pgrep -of 'alsa-watch'`" != "x$$" ]; then
    exit 1
fi

# Configure the sound card to the default.
/usr/local/bin/alsa-reconfigure

# Begin monitering.
{
dbus-monitor --system --monitor "type='signal',path='/org/freedesktop/Hal/Manager',interface='org.freedesktop.Hal.Manager'" | while read -r EVT; do
  echo "$EVT" | egrep -qi "(DeviceAdded|DeviceRemoved)"
  if [ "$?" = '0' ]; then
    read -r EVT_VAL
    echo "$EVT_VAL" | egrep -qi '(alsa_playback|sound_card)_[0-9]+"'
    if [ "$?" = '0' ]; then
      # Reconfigure the sound card if a sound card is plugged in or out.
      /usr/local/bin/alsa-reconfigure
    fi
  fi
done
} &

Another required script is alsa-reconfigure. The following is what I put into the alsa-reconfigure script. I reset the volume level here:

#!/bin/sh
# Path: /usr/local/bin/alsa-reconfigure
# Exit if there's no sound card.
[ -f /proc/asound/cards ] || exit 0
cat /proc/asound/cards | grep -qi 'no soundcard' && exit 0

# Prefer USB audio device to other sound cards.
cat /proc/asound/cards | grep -qi USB-Audio
if [ "$?" == "0" ]; then
    CARD=`cat /proc/asound/cards | grep USB-Audio | head -1 | perl -pi -e "s/\s*([0-9])+.*/\1/"`
    USB='y'
else
    CARD=`cat /proc/asound/cards | head -1 | perl -pi -e "s/\s*([0-9])+.*/\1/"`
    USB='n'
fi

# Update ALSA settings.
echo
"pcm.foo {
    type dmix
    slave.pcm "hw:$CARD"
    ipc_key 1024
}

pcm.!default {
    type plug
    slave.pcm "foo"
}

ctl.!default {
    type hw
    card $CARD
}
" > /etc/asound.conf
chmod 644 /etc/asound.conf

# Reset the volume. (optional)
if [ "$USB" == 'y' ]; then
    amixer sset 'PCM' 80% > /dev/null 2>&1
else
    amixer sset 'Master' 30% > /dev/null 2>&1
fi

You could also do something different such as restarting PulseAudio daemon:

#!/bin/sh
# Path: /usr/local/bin/alsa-reconfigure
# Exit if there's no sound card.
[ -f /proc/asound/cards ] || exit 0
cat /proc/asound/cards | grep -qi 'no soundcard' && exit 0

# Prefer USB audio device to other sound cards.
cat /proc/asound/cards | grep -qi USB-Audio
if [ "$?" == "0" ]; then
    CARD=`cat /proc/asound/cards | grep USB-Audio | head -1 | perl -pi -e "s/\s*([0-9])+.*/\1/"`
else
    CARD=`cat /proc/asound/cards | head -1 | perl -pi -e "s/\s*([0-9])+.*/\1/"`
fi

# Update ALSA settings. (optional if your Linux distribution uses PulseAudio by default)
echo
"pcm.!default {
    type pulse
}

ctl.!default {
    type pulse
}
" > /etc/asound.conf

pkill -f '(^|/)pulseaudio( |$)' > /dev/null 2>&1
sleep 1
pkill -9 -f '(^|/)pulseaudio( |$)' > /dev/null 2>&1

# Restart PulseAudio daemon
pulseaudio
  --system --daemonize --high-priority --realtime --log-target=syslog
  --disallow-module-loading --disallow-exit
  --resample-method=src-sinc-best-quality --no-cpu-limit -n
  -L "module-native-protocol-unix auth-anonymous=1"
  -L "module-native-protocol-tcp auth-ip-acl=192.168.0.0/16;127.0.0.0/8"
  -L "module-rescue-streams"
  -L "module-alsa-sink device=hw:$CARD"

I execute alsa-watch in my /etc/rc.local file and it works perfectly for me. ๐Ÿ™‚

Switching from GNOME to XFCE 4.4

I recently switched from GNOME to XFCE + SLiM, which is more light-weight. I am very satisfied with XFCE because of smaller footprint and less unnecessary applications.

However, I have encountered a few small issues.

Problem with opening a URL from Thunderbird

Clicking a URL in Thunderbird doesn’t open a browser at all. I was able to find a solution here. The more elegant and XFCE-friendly solution is to place the following file into /usr/lib/mozilla-thunderbird/defaults/pref/:

# /usr/lib/mozilla-thunderbird-defaults/pref/xfce.js

user_pref("network.protocol-handler.app.http","/usr/bin/exo-open");
user_pref("network.protocol-handler.app.https","/usr/bin/exo-open");
user_pref("network.protocol-handler.app.ftp","/usr/bin/exo-open");

Evince still requires GNOME.

Evince is a great document viewer, but it depends on many GNOME libraries. Therefore, installing Evince again means that the complete switchover to XFCE doesn’t make a sense. Instead, I installed the official Adobe Acrobat Reader as an alternative. (epdfview was also an option, but it lacks some essential features.)

I use QtCurve theme for GTK2, KDE3 and 4. The problem is that acroread is still a 32-bit application, and there’s no libqtcurve.so in Gentoo emul-* packages. The result was working but ugly and inconsistent look.

To make acroread have the same look with other 64-bit GUI applications, I have set up chrooted Gentoo x86 installation, emerged gtk-engines-qtcurve there and copied the 32-bit libqtcurve.so into /usr/lib32/gtk-2.0/2.10.0/engines/.

To be honest, it was painful to build all x86 stuff just for a single shared object, but it is also nice to see all applications has the same look and feel.

Notes applet loses the recent changes.

XFCE Notes applet saves its files a few minutes after keystroke, and it often leads to the loss of recent changes in my to-do list. There’s no workaround other than modifying the source code AFAIK. I hope the save timeout value becomes configurable in the near future.

XWFM doesn’t have a shortcut for cycling windows list backward.

With Metacity, I mapped ‘alt-grave(`)’ to cycle windows list backward. This mapping is very useful when you pressed alt-tab one or two more times by mistake – you can always go backward with just a few more alt-grave instead of cycling the long windows list with many alt-tab keystrokes.

Time Out applet counts down even if there’s no user activity.

XFCE Time Out applet is a good alternative to Workrave, but it doesn’t stop counting down even if I am away from the computer.

Conclusion

I mentioned a few problems I’ve found while I use XFCE 4.4 in this post and provided workarounds for some of them. You might feel that XFCE has a lot of problem from this post, but you got it wrong if you felt so. In my opinion, XFCE is an extremely stable and fast desktop environment with nice features and better customizability.

URL Monitor – Getting Notified When a Web Page is Updated

I’ve been using RSS Generator for a while to generate RSS for web pages which don’t provide RSS. However, the service often goes unreliable probably due to enormous load from various RSS readers. Another caveat was that the URL of the generated RSS is so long that it’s not accepted by the input form of some web-based RSS readers.

So, I rather chose to write a simple shell script which sends me an e-mail message when the web pages in my watch list change. It’s name is ‘URL Monitor’:

#!/bin/sh
# Path: /usr/local/bin/url-monitor

mkdir -p /var/cache/url-monitor
cat /etc/url-monitor.conf | while read -r NAME; do
  read -r URL || exit 1
  read -r INTERVAL || exit 2
  read -r STRIP_REGEX || exit 3
  read -r NEEDLE || exit 4
  read -r REPLACEMENT || exit 5

  if [ -f "/var/cache/url-monitor/$NAME.html" ]; then
    MTIME=`stat --format=%Z "/var/cache/url-monitor/$NAME.html"`
    NOW=`date +%s`
    AGE=$(($NOW - $MTIME))
    if [ $AGE -lt $INTERVAL ]; then
      continue;
    fi
  fi

  wget -q -T 60 -O - "$URL" | perl -pi -e 's/[rn]/ /g' | perl -pi -e "s/$STRIP_REGEX//gi" | perl -pi -e 's/s+/ /g' | perl -pi -e "s/$NEEDLE/$REPLACEMENT/gi" > "/var/cache/url-monitor/$NAME.html.new"

  if [ ! -f "/var/cache/url-monitor/$NAME.html.new" ] || [ `stat --format=%s "/var/cache/url-monitor/$NAME.html.new"` == "0" ]; then
    echo "Failed to fetch - $NAME" >&2
    rm -f "/var/cache/url-monitor/$NAME.html.new"
    touch "/var/cache/url-monitor/$NAME.html"
    exit 6
  fi

  if [ -f "/var/cache/url-monitor/$NAME.html" ]; then
    diff -q "/var/cache/url-monitor/$NAME.html" "/var/cache/url-monitor/$NAME.html.new" > /dev/null 2>&1
    if [ "$?" == "0" ]; then
      rm -f "/var/cache/url-monitor/$NAME.html.new"
      touch "/var/cache/url-monitor/$NAME.html"
      continue
    else
      mv -f "/var/cache/url-monitor/$NAME.html.new" "/var/cache/url-monitor/$NAME.html"
    fi
  else
    mv -f "/var/cache/url-monitor/$NAME.html.new" "/var/cache/url-monitor/$NAME.html"
  fi

  # Send notification
  {
    echo 'From: URL Monitor <[email protected]>'
    echo 'To: Trustin Lee <[email protected]>'
    echo "Subject: $NAME - updated"
    echo 'Content-Type: text/html; charset=euc-kr'
    echo
    cat "/var/cache/url-monitor/$NAME.html"
    echo
  } | sendmail trustin
done

This quick and dirty shell script simply strips out unnecessary part from the fetched web page, caches it and notifies me (local user ‘trustin’) via an e-mail when the newly fetched stuff differs from the cached one. The following is the example configuration file (/etc/url-monitor.conf):

JavaWorld: Featured Tutorials
http://www.javaworld.com/features/index.html
86400
(^.*<div id="toplist">|<p><a class="findmore".*$)
/javaworld/
http://www.javaworld.com/javaworld/
DDJ.com: High Performance Computing
http://www.ddj.com/hpc-high-performance-computing/archives.jhtml
86400
(^.*Feature Articless*-->|<br clear="left">.*$)
/hpc-high-performance-computing/
http://www.ddj.com/hpc-high-performance-computing/
Lono.pe.kr
http://lono.pe.kr/src/
86400
(^.*[[Start]]-->|<!--[[.*$)
/src/
http://www.lono.pe.kr/src/

Each line has the following meaning:

  • 1st line – the subject of the web page
  • 2nd line – revisit interval (in seconds)
  • 3rd line – what to strip out (in regex)
  • 4th line – something to replace (in regex), probably relative URLs
  • 5th line – what you want to replace the expression specified in the 4th line with

Once configured, url-monitor should be executed periodically. I added the following line to my crontab:

# Path: /etc/cron.d/url-monitor.cron
SHELL=/bin/bash
PATH=/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=trustin
HOME=/root

# Run the URL monitor every three minutes
*/3 * * * *  root  /usr/local/bin/url-monitor

As you noticed, it’s very primitive and requires you to modify the script itself to configure certain parameters. However, I think it’s just OK as long as the number of the web pages I have to monitor (read: which doesn’t provide RSS) is small.

๋‚จ์ž๋Š” ๋‘์ชฝ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

ํ”„๋ ˆ์ธ ๋Œ€ํ‘œ์ด์‚ฌ ์ด์ค€์˜๋‹˜์˜ ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ผ์˜จ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ฝ๋‹ค ๋ณด๋‹ˆ ์™€๋‹ฟ๋Š” ๋ฐ”๋„ ์žˆ๊ณ  ์žฌ๋ฏธ๋„ ์žˆ๋„ค์š”.

์†Œํ”„ํŠธ์›จ์–ด๋„ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ์ด ์ข‹์œผ๋ฉด์„œ ๋‚ด๋ถ€ ์•„ํ‚คํ…์ฒ˜๋„ ์šฐ์ˆ˜ํ•ด์•ผ ํ•˜๋“ฏ, ๋‚˜์—๊ฒ ์–ด๋–ค ๋‘ ๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•œ์ง€ ๊ณ ๋ฏผํ•ด ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‚˜์˜ ๋ฉ”์ผ ๊ด€๋ฆฌ ์›์ •๊ธฐ

๊ธ€์„ ์“ฐ๋ ค๊ณ  ๋งˆ์Œ์„ ๋จน์œผ๋ฉด ํ•ญ์ƒ ๋จผ์ € ๋– ์˜ค๋ฅด๋Š” ํ•  ๋ง์ด ๋ฐ”๋กœ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ํ˜๋Ÿฌ๊ฐ„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ๋‚ด๊ฐ€ ๋ญ ๊ทธ๋ฆฌ ๋ฐ”์œ ์œ„์ธ์ด๋ผ๋„ ๋˜๋Š”์ง€ ํ—ˆํƒˆํ•œ ์›ƒ์Œ์ด ๋‚˜์˜ค๊ณค ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์š”์ฆ˜์—๋Š” ์ •๋ง ํ•˜๋Š” ์ผ๋„ ์—†์ด ์‹œ๊ฐ„์ด ํ๋ฅด๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋Šฆ์ž  ์ž๋žด ์•„๊ธฐ ๋Œ๋ณด๋žด ์‹์‚ฌํ•˜๊ณ  ํ•œ์ˆจ ๋Œ๋ฆฌ๋žด. ์ด๋Ÿฐ ์‚ถ์˜ ์‚ฌ์น˜๋ฅผ ๋ˆ„๋ฆฌ๋‹ค ๋ณด๋ฉด ์–ธ์  ๊ฐ€ ์ด๋Ÿฐ ๋ฐ‘์ฒœ๋„ ๋ฐ”๋‹ฅ๋‚˜๋Š” ๊ฒŒ ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค. ๊ฐ€๋œฉ์ด๋‚˜ ์ ˆ์•ฝ์ด๋ผ๋Š” ๊ฒƒ์„ ์ž˜ ๋ชจ๋ฅด๋Š” ๋‚˜์—๊ฒ ๊ทธ๋ ‡๋‹ค.

๊ทธ๋ž˜๋„ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ๋‚จ๋“ค์ด ๋ณด๋ฉด ์†Œ์†Œํ•˜๋‹ค๊ณ  ํ• ๋งŒํ•œ ์ผ๋“ค์— ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์„ ํ• ์• ํ–ˆ๋‹ค. ์˜ค๋Š˜์€ ์™„๋ฒฝํ•œ ๋ฉ”์ผ ์ฒด๊ณ„ ๊ตฌ์ถ•์„ ์œ„ํ•œ ๋‚˜๋งŒ์˜ ์—ฌ์ •์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ ์ž ํ•œ๋‹ค.

์–ด๋Š ๋‚  ๋ฌธ๋“ 2000๋…„ ๋ถ€ํ„ฐ ์Œ“์ธ 11๋งŒ์—ฌ ํ†ต์˜ ๋ฉ”์ผ์„ ํด๋”๋ฅผ ๋‚˜๋ˆ„์ง€ ์•Š๊ณ  ํšŒ์‚ฌ ๋‚ด๋ถ€ ๋ฉ”์ผ๊ณผ *ํ•จ๊ป˜* ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ํšŒ์‚ฌ ๋ณด์•ˆ ์ •์ฑ…์ƒ GMail๊ณผ ๊ฐ™์€ ๊ณต์šฉ ์„œ๋น„์Šค์— ๋‚ด๋ถ€ ๋ฉ”์ผ์„ ๋‹ด์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ž์ฒด์ ์œผ๋กœ ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ์„ธํŒ…ํ•ด IDC ์— ์ž…์ฃผ์‹œ์ผฐ๋‹ค. Dovecot IMAP ์„œ๋ฒ„์™€ fetchmail์„ ์‚ฌ์šฉํ•ด ํ•˜๋‚˜์˜ ๊ณ„์ •์— ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ๊ธ์–ด์˜ค๋„๋ก ์„ค์ •ํ–ˆ๋‹ค.

11๋งŒํ†ต์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธ์–ด ์˜ค๋Š” ๋ชจ์Šต์„ ๋ฉํ•˜๋‹ˆ ๋ฐ”๋ผ๋ณด๋‹ค ๋ณด๋‹ˆ ์—”์ฝ”๋”ฉ์ด๋‚˜ ์ œ๋ชฉ ํฌ๋งคํŒ…์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ๋“ค์ด ๋งŽ์ด ๋ณด์˜€๋‹ค. ๊ทธ๋ž˜์„œ ์ˆ˜์‹ญ์—ฌ๊ฐœ์˜ ์ •๊ทœํ‘œํ˜„์‹๊ณผ ๋ฌธ์ž์…‹ ์ž๋™์ธ์‹ ๋ชจ๋“ˆ, JavaMail API์„ ์ด์šฉํ•ด Exim MTA ์ธก์— ํ•„ํ„ฐ๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค. (์ฒ˜์Œ์—๋Š” PERL๋กœ ํ–ˆ์ง€๋งŒ ๋‚˜์ค‘์—๋Š” ๊ทธ ๊ทœ์น™์ด ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ ธ์„œ Java๋กœ ์ „๋ถ€ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ๋‹ค.) ๊ทธ ๊ณผ์ •์—์„œ ๋ฉ”์ผ์„ ๋Œ€๋Ÿ‰์œผ๋กœ ๋ฐ›์•„ ์˜ค๋ฉด์„œ ์‹คํ—˜ํ•˜๋‹ค ๋ณด๋‹ˆ ์ผ์ข…์˜ ํŠธ๋ž˜ํ”ฝ ์ดˆ๊ณผ ๋•ํƒ์— GMail ๊ณ„์ •์ด 24์‹œ๊ฐ„ ๋™์•ˆ ๋ง‰ํžˆ๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ฒ˜์Œ์—” ์–ด์ฐŒ๋‚˜ ๋‹นํ™ฉํ–ˆ๋Š”์ง€…

์ด๋ ‡๊ฒŒ ์šฐ์—ฌ๊ณก์ ˆ ๋์— ๋ฐ›์•„ ์˜จ 11๋งŒ์—ฌ ํ†ต์˜ ๋ฉ”์ผ์„ ์ฃผ์ œ๋‚˜ ์—ฐ๋„๋ณ„๋กœ ์ชผ๊ฐœ๊ธฐ๊ฐ€ ์‹ซ์–ด์„œ – ์ด๊ฑธ ์™œ ์‚ฌ๋žŒ์ด ํ•ด์•ผ ํ•˜๋‚˜? – ๊ฒ€์ƒ‰ ํด๋” ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ฒ€์ƒ‰ ํด๋” ๊ธฐ๋Šฅ์ด ์ง€์›๋˜๋Š” ๋ฉ”์ผ ํด๋ผ์ด์–ธํŠธ๋Š” Evolution, Claws-mail (mairix๋ฅผ ํ†ตํ•ด), Thunderbird, Opera 9.5 ๋ฒ ํƒ€์ธ๋ฐ, ๋ชจ๋‘ ๊ฒฐ๊ฒฉ ์‚ฌ์œ ๊ฐ€ ์žˆ์—ˆ๋‹ค. Claws-mail์€ mairix๋ผ๋Š” ์™ธ๋ถ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ๊ณ , ๋ฌด์—‡๋ณด๋‹ค๋„ IMAP ์ง€์›์ด ๋„ˆ๋ฌด ๋ถ€์‹คํ•ด์„œ ํƒˆ๋ฝ. Thunderbird๋Š” ๊ฒ€์ƒ‰ ํด๋”์˜ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ๋„ˆ๋ฌด ๋‹จ์ˆœํ•ด์„œ ํƒˆ๋ฝ. Evolution์€ ์กฐ๊ฑด์‹์€ ์›ํ•˜๋Š” ๋งŒํผ ๋ณต์žกํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ 11๋งŒ๊ฐœ๋ฅผ ํด๋”๋ฅผ ์—ด ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•ด์„œ ํƒˆ๋ฝ. ๋งˆ์ง€๋ง‰ ํ›„๋ณด Opera 9.5 ๋ฒ ํƒ€๋Š” ๊ทน๋„๋กœ ๊ฐ•๋ ฅํ•œ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰, ๊ฒ€์ƒ‰ ํด๋”, ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ ๋“ฑ์„ ์ œ๊ณตํ•˜์—ฌ ๋„ˆ๋ฌด๋‚˜ ๋งŒ์กฑ์Šค๋Ÿฌ์› ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์™€ ๋ฉ”์ผ ํด๋ผ์ด์–ธํŠธ, ๊ทธ๋ฆฌ๊ณ  IRC ํด๋ผ์ด์–ธํŠธ๊นŒ์ง€ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ๋˜์–ด ์žˆ๋Š”๋ฐ๋‹ค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋„ ์ ์–ด ๊ธˆ์ƒ์ฒจํ™”์˜€์ง€๋งŒ, ๊ฒฐ์ •์ ์œผ๋กœ ๋ถˆ์•ˆ์ •ํ–ˆ๋‹ค. ์•„์•„… ์ง€๊ตฌ์—๋Š” ๋‚ด ์š”๊ตฌ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๋ฉ”์ผ ํด๋ผ์ด์–ธํŠธ๋Š” *์•„์ง* ์—†์—ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ํฌ๋ง์ด ์žˆ๋‹ค๋ฉด GNOME 2.22์™€ ํ•จ๊ป˜ ๋”ธ๋ ค ์˜ค๋Š” Evolution์€ ๊ทธ๋ž˜๋„ ๊ฒ€์ƒ‰ ํด๋” ๊ธฐ๋Šฅ์˜ ์„ฑ๋Šฅ์— ํ–ฅ์ƒ์ด ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜คํžˆ๋ ค ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋„ ๋” ์ ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋˜ Fedora 8์—์„œ GNOME๋งŒ 2.20์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  Evolution๋งŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค. ํ˜น์‹œ๋‚˜ ํ•˜๋Š” ์‹ฌ์ •์œผ๋กœ Fedora 9 ๋ฒ ํƒ€๋ฅผ ์„ค์น˜ํ–ˆ์ง€๋งŒ ๋‚ด ๋žฉํƒ‘์€ ์•„์ง ์ง€์›์ด ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š์•„ ๋งŽ์€ ๋ถ€๋ถ„์ด ๋ถˆํŽธํ•ด ๋‹ค์‹œ Fedora 8์„ ์„ค์น˜ํ•˜๊ณ  ๋ง์•˜๋‹ค.

์ด์ฏค ๋˜์„œ ํฌ๊ธฐํ–ˆ๋‹ค๋ฉด ์–ด๋• ์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ๋„ ๋“ค์ง€๋งŒ ์–ธ์ œ๋‚˜ ๋งˆ์Œ์— ๋“ค ๋•Œ๊นŒ์ง€ ๋ฐ”๊พธ๊ณ  ๋˜ ๋ฐ”๊พธ๋Š”๊ฒŒ ๋‚ด ์„ฑ๊ฒฉ์ธ์ง€๋ผ, ๊ฒฐ๊ตญ GNOME 2.20์„ ์“ฐ๋ฉด์„œ Evolution 2.22๋„ ์“ธ ์ˆ˜ ์žˆ๋Š” Gentoo Linux๋กœ ์žฌ์„ค์น˜๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. Gentoo Linux๋Š” 10๋ฒˆ ์ •๋„๋Š” ๊น”์•„ ๋ณธ ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ์„ธํŒ…์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‚ด ์†์„ ํƒœ์šฐ๋Š” ๊ธฐ๋‚˜๊ธด ์ปดํŒŒ์ผ ์‹œ๊ฐ„๊ณผ ์ž˜ ์žกํžˆ์ง€ ์•Š๋Š” ๋ฌด์„ ๋žœ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๋Š” ๋ฐ ํ• ์• ํ•œ ์‹œ๊ฐ„์„ ์ œ์™ธํ•œ๋‹ค๋ฉด…

ํ•˜์ง€๋งŒ Evolution 2.22๋Š” ๊ธฐ๋Œ€๋งŒํผ ๋น ๋ฅด์ง€ ์•Š์•˜๋‹ค. ์—ญ์‹œ *์•„์ง* ์ง€๊ตฌ์˜ ๋ฉ”์ผ ํด๋ผ์ด์–ธํŠธ๋“ค์—๊ฒŒ 11๋งŒํ†ต์€ ๋ฌด๋ฆฌ์ธ ๊ฒƒ ๊ฐ™๋‹ค. Opera 9.5 ์•ˆ์ • ๋ฒ„์ „์ด ์•„์ง ๋‚˜์˜ค์ง€ ์•Š์€ ๊ฒƒ์„ ๋ชป๋‚ด ์•„์‰ฌ์›Œํ•˜๋Š” ์ˆœ๊ฐ„์ด์—ˆ๋‹ค.

๊ฒฐ๊ตญ ํƒ€ํ˜‘์ฑ…์œผ๋กœ, ๋ณผ์ผ์ด ๋๋‚œ ๋ฉ”์ผ์€ ‘Archive’๋ผ๋Š” ํ•˜๋‚˜์˜ ํด๋”๋กœ ์ „๋ถ€ ์˜ฎ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒ€์ƒ‰ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๋‚˜๋ฆ„ ๋งŒ์กฑ์Šค๋Ÿฌ์› ๋‹ค. ๋‚ด๊ฐ€ ์ผ์ผ์ด ‘Archive’ ํด๋”๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๋งŒ ์ œ์™ธํ•œ๋‹ค๋ฉด… ์ด๊ฑธ ์™œ ๋‚ด๊ฐ€ ํ•ด์•ผ ๋˜๋Š”๊ฑด์ง€.

๊ทธ๋Ÿฐ๋ฐ ์ด ๊ฒ€์ƒ‰ ํด๋”๋ผ๋Š” ๊ฒƒ์—์„œ ์ œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด๋ผ๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์ผ ํ•„ํ„ฐ ๊ทœ์น™ ๊ธฐ๋Šฅ์—์„œ ์ œ๊ณตํ•˜๋Š” ์กฐ๊ฑด์˜ ์ข…๋ฅ˜์— ๋น„๊ตํ•˜๋ฉด ๊ทธ ์ˆ˜๊ฐ€ ๋งค์šฐ ์ ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Evolution์—์„œ๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์„ ๋ฉ”์ผ ํ•„ํ„ฐ ๊ทœ์น™์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒ€์ƒ‰ ํด๋”์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์„ฑ๋Šฅ์„ ์œ„ํ•œ ๋‚˜๋ฆ„์˜ ๊ถ์—ฌ์ง€์ฑ…์ด๊ฒ ๊ฑฐ๋‹ˆ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€๋งŒ, ๊ทผ๋ณธ์ ์œผ๋กœ ์ธ๋ฑ์‹ฑ์„ ์ œ๋Œ€๋กœ ์•ˆํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถˆํŽธ์„ ๊ฐ€ํ•˜๊ณ  ์žˆ๋Š” ๊ฒŒ ์•„๋‹Œ๊ฐ€? Opera 9.5 ์•ˆ์ • ๋ฒ„์ „์ด ์•„์ง ๋‚˜์˜ค์ง€ ์•Š์€ ๊ฒƒ์„ ๋ชป๋‚ด ์•„์‰ฌ์›Œํ•˜๋Š” *๋‘ ๋ฒˆ์งธ* ์ˆœ๊ฐ„์ด์—ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹์„ ํ†ตํ•œ ์ •๊ตํ•œ ํ•„ํ„ฐ๋ง์ด ํ•„์š”ํ–ˆ๋˜ ๋‚˜๋Š” ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰ ํด๋”๋ฅผ ํฌ๊ธฐํ–ˆ๋‹ค. Archive ํด๋”์˜ ๋„์ž… ์ดํ›„ ๋˜ ํ•œ ๋ฒˆ์˜ ํƒ€ํ˜‘์ด์—ˆ๋‹ค. ์–ด์จŒ๋“  ๋ฉ”์ผ ํ•„ํ„ฐ ๊ทœ์น™์„ ์ž‘์„ฑํ•˜์—ฌ ๋ฉ”์ผ์ด ๋“ค์–ด์˜ค๋Š” ์ˆœ๊ฐ„ ์›ํ•˜๋Š” ํด๋”์— ์Œ“์ด๊ฒŒ ํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ๊ณ , ํ•„ํ„ฐ๊ฐ€ ์ •๊ตํ•˜๋‹ˆ ๋‚˜๋ฆ„ ๊ฒ€์ƒ‰ ํด๋”์˜ ํ•„์š”์„ฑ์„ ๋Š๋ผ์ง€ ๋ชปํ•˜๊ฒŒ ํ•ด ์ฃผ์–ด ๊ทธ๋‚˜๋งˆ ์•„์‰ฌ์›€์€ ํฌ์ง€ ์•Š์•˜๋‹ค. ๋‹ค๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ๋Œ์•„์˜จ ๋‚˜์˜ ๊ธธ์ด ๋„ˆ๋ฌด๋‚˜ ๋ฉ€์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๋Š๋ผ์ง€ ์•Š์„ ์ˆ˜ ์—†์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์ด์•ผ๊ธฐ๋Š” ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค. Firefox 3 ๋ฒ ํƒ€์™€ GNOME 2.22๋ฅผ ์“ฐ๊ณ  ์‹ถ์–ด์ง„ ๊ฒƒ์ด๋‹ค. ์—ฌ๋Ÿฌ ์˜์กด์„ฑ ๋ฌธ์ œ ๋•Œ๋ฌธ์— Evolution 2.22๋‚˜ GNOME 2.22์˜ ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋Š” Firefox 2๋ฅผ ๋ฐ˜๋“œ์‹œ ํ•„์š”๋กœ ํ•œ๋‹ค. GNOME 2.22์˜ ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ์•ผ ๊ทธ๋ƒฅ ์„ค์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ๋งŒ์ด์ง€๋งŒ, ์ง€๊ธˆ๊นŒ์ง€ ํž˜๋“ค๊ฒŒ ๊ทœ์น™์„ ์„ค์ •ํ•œ Evolution์€ ์–ด์ฉŒ๋ž€ ๋ง์ธ๊ฐ€. ์—ฌ๊ธฐ์„œ ๋ณดํ†ต ํฌ๊ธฐํ•˜๊ฒ ์ง€๋งŒ ๋‚˜๋Š” ์ข€์ฒ˜๋Ÿผ ํฌ๊ธฐ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ๋ชป๋œ ๋ฒ„๋ฆ‡์ด ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ sieve ๋ผ๋Š” ์„œ๋ฒ„์ธก์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ผ ํ•„ํ„ฐ๋ง ์–ธ์–ด๋ฅผ ๋ฐฐ์› ๋‹ค. ๋ฌธ๋ฒ•์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ณ  Dovecat IMAP ์„œ๋ฒ„์™€ ์—ฐ๋™๋„ ์‰ฝ์ง€๋งŒ ์–ธ์–ด์— ๋Œ€ํ•œ ๊น”๋”ํ•œ ๋ฌธ์„œ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ํž˜๋“ค๊ณ  ์ •๊ทœ ํ‘œํ˜„์‹ ๋งค์นญ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ ์˜ˆ๊ฐ€ ์—†์–ด์„œ ๊ด€๋ จ RFC๋ฅผ ์ง์ ‘ ์ฝ์–ด์•ผ ํ–ˆ๋‹ค. ๋ช‡ ๋ฒˆ์˜ ์‹ค์ˆ˜๋„ ์žˆ์—ˆ์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” Evolution์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ๋ชจ๋“  ๊ทœ์น™์„ ์„œ๋ฒ„ ์ธก์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฆ‰, ์–ด๋–ค ๋ฉ”์ผ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์จ๋„ ๋ฉ”์ผ ํ•„ํ„ฐ๋ง์ด ์ด๋ฏธ ๋‹ค ๋œ ์ƒํƒœ๋กœ ๊ณ„์ธตํ™”๋œ ๋ฉ”์ผํ•จ์„ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ๋‹ค๋‹ค๋ฅธ